├── .gitignore ├── Dokumentacja ├── CustomCommands.sty ├── DefinicjeWiadomosci │ ├── AgentMes │ │ ├── checkForScham.json │ │ ├── destroyPiece.json │ │ ├── discovery.json │ │ ├── infomationExchangeRespond.json │ │ ├── informationExchangeAsk.json │ │ ├── joinGame.json │ │ ├── makeMove.json │ │ ├── pickPiece.json │ │ └── putPiece.json │ ├── Errors │ │ ├── invalidMove.json │ │ ├── pickPiece.json │ │ ├── putPieceError.json │ │ ├── timePenaltyError.json │ │ └── undefinedErrorMessage.json │ ├── GMMes │ │ ├── checkForSchamResponse.json │ │ ├── destroyPieceResponse.json │ │ ├── discoveryResponse.json │ │ ├── gameEnd.json │ │ ├── gameStart.json │ │ ├── informationExchangeAskForward.json │ │ ├── informationExchangeRespondForward.json │ │ ├── joinGameResponse.json │ │ ├── makeMoveResponse.json │ │ ├── pickPieceResponse.json │ │ └── putPieceResponse.json │ └── messageWrapper.json ├── DiagramyAktywnosci │ ├── DiagramyAktywnosci.tex │ └── resources │ │ ├── AgentToCSConn.eps │ │ ├── ComServer.eps │ │ ├── DolaczenieDoRozgrywki.eps │ │ ├── ObslugaZapytaniaAgenta.eps │ │ ├── RozpoczecieGM.eps │ │ └── RozpoczecieRozgrywki2.eps ├── DiagramyKlas │ ├── Agent.tex │ ├── DiagramyKlas.tex │ ├── GM.tex │ ├── Komunikator.tex │ └── resources │ │ ├── Agent.eps │ │ ├── CS.eps │ │ └── GM.eps ├── DiagramySekwencji │ ├── DiagramySekwencji.tex │ └── resources │ │ ├── Agent_odmowa.eps │ │ ├── Agent_zaakceptowany.eps │ │ ├── CS.eps │ │ └── GM.eps ├── DiagramyStanow │ ├── DiagramyStanow.tex │ └── resources │ │ ├── AgentStates.pdf │ │ ├── GM.eps │ │ ├── Goal.eps │ │ ├── Goal.pdf │ │ └── Piece.pdf ├── Dokumentacja.tex ├── Jezyk.tex ├── Komunikacja.tex ├── Konfiguracje │ ├── Konfiguracje.tex │ └── resources │ │ ├── Agent.jsonc │ │ ├── AgentConfig.json │ │ ├── CS.jsonc │ │ ├── CSConfig.json │ │ ├── GM.jsonc │ │ └── GMConfig.json ├── MierzenieCzasu.tex ├── PrzypadkiUzycia │ ├── Agent.tex │ ├── GameMaster.tex │ ├── PrzypadkiUzycia.tex │ ├── Uzytkownik.tex │ └── resources │ │ ├── Agent-Agent.pdf │ │ ├── GM-GM.pdf │ │ ├── USER-AGENT.pdf │ │ ├── USER-GM.pdf │ │ └── USER-SERVER.pdf ├── Reguly.tex ├── UserStories.tex ├── Wyjatki.tex ├── furps.tex └── resources │ ├── game.png │ └── systemArchitecture.pdf ├── README.md └── UML ├── ActivityDiagram ├── CommunicationServer.puml ├── GM-RequestFlow.txt ├── GM-StartFlow.txt ├── csConnection.puml ├── joinGame.puml └── startGame.puml ├── ClassDiagram ├── Communicator.puml ├── GM.puml └── Player.puml ├── SequenceDiagram ├── Agent_odmowa.puml ├── Agent_zaakceptowany.puml ├── CS.puml └── GM.puml ├── StateDiagram ├── AgentStates.drawio ├── GM.plantuml ├── Goal.drawio └── Piece.drawio ├── UseCaseDiagram ├── Agent-Agent.drawio ├── GM-GM.drawio ├── USER-Agent.drawio ├── USER-GM.drawio └── USER-SERVER.drawio └── diagramSystemu.drawio /.gitignore: -------------------------------------------------------------------------------- 1 | ## Wyłącz wszystkie pdf z wyjątkiem tych w folderach resources 2 | *.pdf 3 | !**/resources/*.pdf 4 | *.svg 5 | 6 | ## Core latex/pdflatex auxiliary files: 7 | *.aux 8 | *.lof 9 | *.log 10 | *.lot 11 | *.fls 12 | *.out 13 | *.toc 14 | *.fmt 15 | *.fot 16 | *.cb 17 | *.cb2 18 | .*.lb 19 | 20 | ## Intermediate documents: 21 | *.dvi 22 | *.xdv 23 | *-converted-to.* 24 | # these rules might exclude image files for figures etc. 25 | # *.ps 26 | # *.eps 27 | # *.pdf 28 | 29 | ## Generated if empty string is given at "Please type another file name for output:" 30 | .pdf 31 | 32 | ## Bibliography auxiliary files (bibtex/biblatex/biber): 33 | *.bbl 34 | *.bcf 35 | *.blg 36 | *-blx.aux 37 | *-blx.bib 38 | *.run.xml 39 | 40 | ## Build tool auxiliary files: 41 | *.fdb_latexmk 42 | *.synctex 43 | *.synctex(busy) 44 | *.synctex.gz 45 | *.synctex.gz(busy) 46 | *.pdfsync 47 | 48 | ## Auxiliary and intermediate files from other packages: 49 | # algorithms 50 | *.alg 51 | *.loa 52 | 53 | # achemso 54 | acs-*.bib 55 | 56 | # amsthm 57 | *.thm 58 | 59 | # beamer 60 | *.nav 61 | *.pre 62 | *.snm 63 | *.vrb 64 | 65 | # changes 66 | *.soc 67 | 68 | # cprotect 69 | *.cpt 70 | 71 | # elsarticle (documentclass of Elsevier journals) 72 | *.spl 73 | 74 | # endnotes 75 | *.ent 76 | 77 | # fixme 78 | *.lox 79 | 80 | # feynmf/feynmp 81 | *.mf 82 | *.mp 83 | *.t[1-9] 84 | *.t[1-9][0-9] 85 | *.tfm 86 | 87 | #(r)(e)ledmac/(r)(e)ledpar 88 | *.end 89 | *.?end 90 | *.[1-9] 91 | *.[1-9][0-9] 92 | *.[1-9][0-9][0-9] 93 | *.[1-9]R 94 | *.[1-9][0-9]R 95 | *.[1-9][0-9][0-9]R 96 | *.eledsec[1-9] 97 | *.eledsec[1-9]R 98 | *.eledsec[1-9][0-9] 99 | *.eledsec[1-9][0-9]R 100 | *.eledsec[1-9][0-9][0-9] 101 | *.eledsec[1-9][0-9][0-9]R 102 | 103 | # glossaries 104 | *.acn 105 | *.acr 106 | *.glg 107 | *.glo 108 | *.gls 109 | *.glsdefs 110 | 111 | # gnuplottex 112 | *-gnuplottex-* 113 | 114 | # gregoriotex 115 | *.gaux 116 | *.gtex 117 | 118 | # htlatex 119 | *.4ct 120 | *.4tc 121 | *.idv 122 | *.lg 123 | *.trc 124 | *.xref 125 | 126 | # hyperref 127 | *.brf 128 | 129 | # knitr 130 | *-concordance.tex 131 | # TODO Comment the next line if you want to keep your tikz graphics files 132 | *.tikz 133 | *-tikzDictionary 134 | 135 | # listings 136 | *.lol 137 | 138 | # makeidx 139 | *.idx 140 | *.ilg 141 | *.ind 142 | *.ist 143 | 144 | # minitoc 145 | *.maf 146 | *.mlf 147 | *.mlt 148 | *.mtc[0-9]* 149 | *.slf[0-9]* 150 | *.slt[0-9]* 151 | *.stc[0-9]* 152 | 153 | # minted 154 | _minted* 155 | *.pyg 156 | 157 | # morewrites 158 | *.mw 159 | 160 | # nomencl 161 | *.nlg 162 | *.nlo 163 | *.nls 164 | 165 | # pax 166 | *.pax 167 | 168 | # pdfpcnotes 169 | *.pdfpc 170 | 171 | # sagetex 172 | *.sagetex.sage 173 | *.sagetex.py 174 | *.sagetex.scmd 175 | 176 | # scrwfile 177 | *.wrt 178 | 179 | # sympy 180 | *.sout 181 | *.sympy 182 | sympy-plots-for-*.tex/ 183 | 184 | # pdfcomment 185 | *.upa 186 | *.upb 187 | 188 | # pythontex 189 | *.pytxcode 190 | pythontex-files-*/ 191 | 192 | # thmtools 193 | *.loe 194 | 195 | # TikZ & PGF 196 | *.dpth 197 | *.md5 198 | *.auxlock 199 | 200 | # todonotes 201 | *.tdo 202 | 203 | # easy-todo 204 | *.lod 205 | 206 | # xmpincl 207 | *.xmpi 208 | 209 | # xindy 210 | *.xdy 211 | 212 | # xypic precompiled matrices 213 | *.xyc 214 | 215 | # endfloat 216 | *.ttt 217 | *.fff 218 | 219 | # Latexian 220 | TSWLatexianTemp* 221 | 222 | ## Editors: 223 | # WinEdt 224 | *.bak 225 | *.sav 226 | 227 | # Texpad 228 | .texpadtmp 229 | 230 | # Kile 231 | *.backup 232 | 233 | # KBibTeX 234 | *~[0-9]* 235 | 236 | # auto folder when using emacs and auctex 237 | ./auto/* 238 | *.el 239 | 240 | # expex forward references with \gathertags 241 | *-tags.tex 242 | 243 | # standalone packages 244 | *.sta 245 | 246 | # generated if using elsarticle.cls 247 | *.spl 248 | -------------------------------------------------------------------------------- /Dokumentacja/CustomCommands.sty: -------------------------------------------------------------------------------- 1 | \usepackage{afterpage} 2 | \usepackage{listings} 3 | 4 | \newcommand{\method}[3][internal void]{ 5 | \item #1 \textbf{#2}\\ 6 | #3 7 | } 8 | 9 | \newcommand{\includeDiagramFullPage}[3][width=\textwidth]{ 10 | \afterpage{% 11 | \thispagestyle{empty} 12 | \begin{figure}[H] 13 | \begin{center} 14 | \includegraphics[#1]{#2} 15 | \caption{#3} 16 | \end{center} 17 | \end{figure} 18 | } 19 | \newpage 20 | } 21 | 22 | \newcommand{\includeDiagram}[3][width=\textwidth]{ 23 | \begin{figure}[H] 24 | \begin{center} 25 | \includegraphics[#1]{#2} 26 | \caption{#3} 27 | \end{center} 28 | \end{figure} 29 | } 30 | 31 | \newenvironment{methods}{\begin{itemize}}{\end{itemize}} 32 | \usepackage{bera} 33 | \usepackage{listings} 34 | \usepackage{xcolor} 35 | 36 | \colorlet{punct}{red!60!black} 37 | \definecolor{background}{HTML}{EEEEEE} 38 | \definecolor{delim}{RGB}{20,105,176} 39 | \colorlet{numb}{magenta!60!black} 40 | 41 | \lstdefinelanguage{json}{ 42 | basicstyle=\normalfont\ttfamily, 43 | stepnumber=1, 44 | numbersep=8pt, 45 | showstringspaces=false, 46 | breaklines=true, 47 | backgroundcolor=\color{background}, 48 | string=[s]{"}{"}, 49 | comment=[l]{:\ "}, 50 | morecomment=[l]{:"}, 51 | literate= 52 | *{0}{{{\color{numb}0}}}{1} 53 | {1}{{{\color{numb}1}}}{1} 54 | {2}{{{\color{numb}2}}}{1} 55 | {3}{{{\color{numb}3}}}{1} 56 | {4}{{{\color{numb}4}}}{1} 57 | {5}{{{\color{numb}5}}}{1} 58 | {6}{{{\color{numb}6}}}{1} 59 | {7}{{{\color{numb}7}}}{1} 60 | {8}{{{\color{numb}8}}}{1} 61 | {9}{{{\color{numb}9}}}{1} 62 | {:}{{{\color{punct}{:}}}}{1} 63 | {,}{{{\color{punct}{,}}}}{1} 64 | {\{}{{{\color{delim}{\{}}}}{1} 65 | {\}}{{{\color{delim}{\}}}}}{1} 66 | {[}{{{\color{delim}{[}}}}{1} 67 | {]}{{{\color{delim}{]}}}}{1}, 68 | } 69 | 70 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/AgentMes/checkForScham.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object" 4 | } 5 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/AgentMes/destroyPiece.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object" 4 | } 5 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/AgentMes/discovery.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object" 4 | } 5 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/AgentMes/infomationExchangeRespond.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["respondToID","distances","redTeamGoalAreaInformations","blueTeamGoalAreaInformations"], 5 | "properties": { 6 | "respondToID": { 7 | "type":"integer" 8 | }, 9 | "distances": { 10 | "type":"array", 11 | "items": { 12 | "type": "number" 13 | } 14 | }, 15 | "redTeamGoalAreaInformations": { 16 | "type":"array", 17 | "items": { 18 | "type": "string", 19 | "enum": ["IDK", "N", "G"] 20 | } 21 | }, 22 | "blueTeamGoalAreaInformations": { 23 | "type":"array", 24 | "items": { 25 | "type": "string", 26 | "enum": ["IDK", "N", "G"] 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/AgentMes/informationExchangeAsk.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["askedAgentID"], 5 | "properties": { 6 | "askedAgentID": { 7 | "type":"integer" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/AgentMes/joinGame.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["teamID"], 5 | "properties": { 6 | "teamID": { 7 | "type":"string", 8 | "enum": ["red","blue"] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/AgentMes/makeMove.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["direction"], 5 | "properties": { 6 | "direction": { 7 | "type":"string", 8 | "enum": ["N", "E", "S", "W"] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/AgentMes/pickPiece.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object" 4 | } 5 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/AgentMes/putPiece.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object" 4 | } 5 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/Errors/invalidMove.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["position"], 5 | "properties": { 6 | "position": { 7 | "type":"object", 8 | "required":["x", "y"], 9 | "properties": { 10 | "x": {"type": "integer"}, 11 | "y": {"type": "integer"} 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/Errors/pickPiece.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["errorSubtype"], 5 | "properties": { 6 | "errorSubtype": { 7 | "type":"string", 8 | "enum": ["NothingThere", "Other"] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/Errors/putPieceError.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["errorSubtype"], 5 | "properties": { 6 | "errorSubtype": { 7 | "type":"string", 8 | "enum": ["AgentNotHolding", "CannotPutThere", "Other"] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/Errors/timePenaltyError.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["waitUntil"], 5 | "properties": { 6 | "waitUntil": { 7 | "type":"string", 8 | "format":"date-time" 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/Errors/undefinedErrorMessage.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "properties": { 5 | "position": { 6 | "type":"object", 7 | "required":["x", "y"], 8 | "properties": { 9 | "x": {"type": "integer"}, 10 | "y": {"type": "integer"} 11 | } 12 | }, 13 | "holdingPiece": { 14 | "type":"boolean" 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/GMMes/checkForSchamResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["sham"], 5 | "properties": { 6 | "sham": { 7 | "type": "boolean" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/GMMes/destroyPieceResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object" 4 | } 5 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/GMMes/discoveryResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["distanceFromCurrent", "distanceN", "distanceNE", "distanceE", "distanceSE", "distanceS", "distanceSW", "distanceW", "distanceNW"], 5 | "properties": { 6 | "distanceFromCurrent": { "type":"integer" }, 7 | "distanceN": { "type":"integer" }, 8 | "distanceNE": { "type":"integer" }, 9 | "distanceE": { "type":"integer" }, 10 | "distanceSE": { "type":"integer" }, 11 | "distanceS": { "type":"integer" }, 12 | "distanceSW": { "type":"integer" }, 13 | "distanceW": { "type":"integer" }, 14 | "distanceNW": { "type":"integer" } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/GMMes/gameEnd.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["winner"], 5 | "properties": { 6 | "winner": { 7 | "type":"string", 8 | "enum": ["red","blue"] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/GMMes/gameStart.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["agentID","alliesIDs","enemiesIDs","teamID","boardSize","goalAreaSize","numberOfPlayers","numberOfPieces","numberOfGoals","penalties","shamPieceProbability","position", "leaderID"], 5 | "properties": { 6 | "agentID": { 7 | "type":"integer" 8 | }, 9 | "alliesIDs": { 10 | "type":"array", 11 | "items": { 12 | "type": "integer" 13 | } 14 | }, 15 | "leaderID": { 16 | "type":"integer" 17 | }, 18 | "enemiesIDs": { 19 | "type":"array", 20 | "items": { 21 | "type": "integer" 22 | } 23 | }, 24 | "teamID": { 25 | "type":"string", 26 | "enum": ["red","blue"] 27 | }, 28 | "boardSize": { 29 | "type":"object", 30 | "required":["x", "y"], 31 | "properties": { 32 | "x": {"type": "integer"}, 33 | "y": {"type": "integer"} 34 | } 35 | }, 36 | "goalAreaSize": { 37 | "type":"integer" 38 | }, 39 | "numberOfPlayers": { 40 | "type":"object", 41 | "required":["allies", "enemies"], 42 | "properties": { 43 | "allies": {"type":"integer"}, 44 | "enemies": {"type":"integer"} 45 | } 46 | }, 47 | "numberOfPieces": { 48 | "type":"integer" 49 | }, 50 | "numberOfGoals": { 51 | "type":"integer" 52 | }, 53 | "penalties": { 54 | "type":"object", 55 | "required":["move","checkForSham","discovery","destroyPiece","putPiece","informationExchange"], 56 | "properties": { 57 | "move": {"type":"integer"}, 58 | "checkForSham": {"type":"integer"}, 59 | "discovery": {"type":"integer"}, 60 | "destroyPiece": {"type":"integer"}, 61 | "putPiece": {"type":"integer"}, 62 | "informationExchange": {"type":"integer"} 63 | } 64 | }, 65 | "shamPieceProbability": { 66 | "type":"number" 67 | }, 68 | "position": { 69 | "type":"object", 70 | "required":["x", "y"], 71 | "properties": { 72 | "x": {"type": "integer"}, 73 | "y": {"type": "integer"} 74 | } 75 | } 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/GMMes/informationExchangeAskForward.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["askingID","leader","teamID"], 5 | "properties": { 6 | "askingID": { 7 | "type": "integer" 8 | }, 9 | "leader": { 10 | "type": "boolean" 11 | }, 12 | "teamID": { 13 | "type":"string", 14 | "enum": ["red","blue"] 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/GMMes/informationExchangeRespondForward.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["respondingID","distances","redTeamGoalAreaInformations","blueTeamGoalAreaInformations"], 5 | "properties": { 6 | "respondingID": { 7 | "type":"integer" 8 | }, 9 | "distances": { 10 | "type":"array", 11 | "items": { 12 | "type": "number" 13 | } 14 | }, 15 | "redTeamGoalAreaInformations": { 16 | "type":"array", 17 | "items": { 18 | "type": "string", 19 | "enum": ["IDK", "N", "G"] 20 | } 21 | }, 22 | "blueTeamGoalAreaInformations": { 23 | "type":"array", 24 | "items": { 25 | "type": "string", 26 | "enum": ["IDK", "N", "G"] 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/GMMes/joinGameResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["accepted"], 5 | "properties": { 6 | "accepted": { 7 | "type":"boolean" 8 | }, 9 | "agentID": { 10 | "type":"integer" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/GMMes/makeMoveResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["madeMove","currentPosition","closestPiece"], 5 | "properties": { 6 | "madeMove": { 7 | "type": "boolean" 8 | }, 9 | "currentPosition": { 10 | "type":"object", 11 | "required":["x", "y"], 12 | "properties": { 13 | "x": {"type": "integer"}, 14 | "y": {"type": "integer"} 15 | } 16 | }, 17 | "closestPiece": { 18 | "type": "integer", 19 | "minimum": 0 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/GMMes/pickPieceResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object" 4 | } 5 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/GMMes/putPieceResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object" 4 | } 5 | -------------------------------------------------------------------------------- /Dokumentacja/DefinicjeWiadomosci/messageWrapper.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["messageID", "timeSent"], 5 | "properties": { 6 | "messageID": { 7 | "type":"integer" 8 | }, 9 | "agentID": { 10 | "type":"integer" 11 | }, 12 | "payload": { 13 | "type":"object" 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Dokumentacja/DiagramyAktywnosci/DiagramyAktywnosci.tex: -------------------------------------------------------------------------------- 1 | \documentclass[../Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \section{Diagramy Aktywności} 5 | \subsection{Połączenie z CS} 6 | \includeDiagram[width=\textwidth]{resources/AgentToCSConn.eps}{Diagram aktywności połączenia Agenta z CS} 7 | Połączenie Agenta skutkuje nadaniem przez CS unikalnego id (patrz \hyperref[sec:komunikacja]{Komunikacja}), 8 | które później wykorzystywane jest w logice rozgrywki. 9 | 10 | \begin{landscape} 11 | \subsection{Połączenie z CS} 12 | \includeDiagram[height=0.5\textheight]{resources/DolaczenieDoRozgrywki.eps}{Diagram aktywności dołączenia do rozgrywki} 13 | \end{landscape} 14 | 15 | \subsection{Praca serwera komunikacyjnego} 16 | \includeDiagram[width=0.7\textwidth]{resources/ComServer.eps}{Diagram aktywności CS} 17 | 18 | \subsection{Obsługa rozpoczęcia rozgrywki przez GM} 19 | \includeDiagram[width=0.7\textwidth]{resources/RozpoczecieGM.eps}{Diagram aktywności rozpoczęcia rozgrywki dla GM} 20 | 21 | \begin{landscape} 22 | \subsection{Obsługa rozpoczęcia rozgrywki przez system} 23 | \includeDiagram[height=0.8\textheight]{resources/RozpoczecieRozgrywki2.eps}{Diagram aktywności rozpoczęcia rozgrywki} 24 | \end{landscape} 25 | 26 | \subsection{Obsługa zapytania przez GM} 27 | \includeDiagram[width=\textwidth]{resources/ObslugaZapytaniaAgenta.eps}{Diagram aktywności obsługi zapytań agenta} 28 | Każde żądanie Agenta jest walidowane przez GM. Sprawdza czy dana akcja nie łamie reguł, czy Agent odczekał karę czasową. Jeśli nie, 29 | przygotowuje odpowiednią odpowiedź błędu. 30 | \end{document} 31 | -------------------------------------------------------------------------------- /Dokumentacja/DiagramyKlas/Agent.tex: -------------------------------------------------------------------------------- 1 | \documentclass[../Dokumentacja.tex]{subfiles} 2 | \begin{document} 3 | \subsection{Moduł Agenta} 4 | \includeDiagram[width=\textwidth]{resources/Agent.eps}{Diagram klas modułu Agenta} 5 | \subsubsection{Agent} 6 | \begin{methods} 7 | \method[private int]{id}{Identyfikator gracza.} 8 | \method[public int]{penaltyTime}{Czas kary.} 9 | \method[public Team]{team}{Enum drużyny, w której jest gracz.} 10 | \method[public bool]{isLeader}{Zmienna informująca czy gracz jest liderem zespołu.} 11 | \method[public bool]{hasPiece}{Zmienna informująca czy gracz jest w posiadaniu piece'a.} 12 | \method[{public Field[,]}]{board}{Tablica dwuwymiarowa przechowująca planszę z perspektywy gracza.} 13 | \method[{public Tuple}]{position}{Współrzędne pola na planszy, na którym stoi gracz.} 14 | \method[{public List}]{waitingPlayers}{Lista id graczy oczekujących na odpowiedź.} 15 | \method[{public int[]}]{teamMates}{Lista identyfikatorów graczy z naszej drużyny.} 16 | \method[private IStrategy]{strategy}{Obiekt odpowiedzialny za używaną strategię.} 17 | \end{methods} 18 | \paragraph{Metody} 19 | \begin{methods} 20 | \method{Player()}{Konstruktor klasy.} 21 | \method{JoinTheGame()}{Metoda dołączająca gracza do gry. Wysyła zapytanie do GM z prośbą o dołączenie.} 22 | \method{Start()}{Metoda rozpoczynająca grę. Rozpoczyna realizowanie strategii przez agenta.} 23 | \method{Stop()}{Metoda zatrzymująca grę. Zatrzymuje pracę agenta i wyłącza go.} 24 | \method{Move()}{Metoda ruszająca gracza na wskazane pole. Wysyła zapytanie do GM i w zależności od odpowiedzi aktualizuje stan wiedzy agneta.} 25 | \method{Put()}{Metoda odkładająca fragment na planszę. Wysyła zapytanie do GM i w zależności od odpowiedzi aktualizuje stan wiedzy agenta.} 26 | \method{BegForInfo()}{Metoda wysyłająca do GM prośbę o wymianę informacji przez innego wybranego agenta} 27 | \method{GiveInfo()}{Metoda udzielająca informacji o rozgrywce wskazanemu graczowi.} 28 | \method{RequestResponse()}{Metoda wywoływana na przyjście wiadomości z prośbą o wymianę informacji. Zapamiętuje parametry gracza który poprosił informację do listy \textit{waitingPlayers}. W przypadku gdy ten gracz był liderem wywołuje metodę \textit{GiveInfo()}} 29 | \method{CheckPiece()}{Metoda sprawdzająca czy fragment to fragment fikcyjny. Wysyła zapytanie do GM i w zależności od odpowiedzi aktualizuje stan wiedzy agenta.} 30 | \method[public void]{AcceptMessage()}{Metoda pobierająca informacje od serwera komunikacyjnego.} 31 | \method{MakeDecisionFromStrategy()}{Metoda, która wywołuje metodę z obiektu strategy. Wywoływana jest okresowo i to ona decyduje o akcjach wykonywanych przez agenta. Używa IStrategy.} 32 | \method[private void]{Communicate()}{Metoda wysyłająca wiadomości do serwera komunikacyjnego. Używana przez metody wykonujące akcje do komunikacj z GM poprzez wysłanie wiadomości do Serwera Komunikacyjnego} 33 | \method[private void]{Penalty()}{Metoda czekająca przez okres kary. Po odczekaniu kary wywołuje generowanie kolejnej akcji.} 34 | \end{methods} 35 | 36 | 37 | \subsubsection{Interface IStrategy} 38 | \paragraph{Metody} 39 | \begin{methods} 40 | \method{MakeDecision(Agent)}{Metoda decyduje na podstawie stanu Agenta jaką akcję wykonać i wykonuje ją na obiekcie Agenta.} 41 | \end{methods} 42 | \subsubsection{Klasa Field} 43 | \begin{methods} 44 | \method[public GoalInfo]{goalInfo}{Stan wiedzy gracza na temat tego pola.} 45 | \method[public bool]{playerInfo}{Informacja czy inny gracz stoi na tym polu.} 46 | \method[public int]{distToPiece}{Odległość pola od najbliższego fragmentu.} 47 | \end{methods} 48 | \subsubsection{Enum Team} 49 | \begin{itemize} 50 | \item \textbf{Red} - informacja, że gracz jest w drużynie czerwonej, 51 | \item \textbf{Blue} - informacja, że gracz jest w drużynie niebieskiej. 52 | \end{itemize} 53 | \subsubsection{Enum GoalInfo} 54 | \begin{itemize} 55 | \item \textbf{IDK} - gracz nic nie wie o danym polu, 56 | \item \textbf{DiscoveredNotGoal} - pole nie jest celem, 57 | \item \textbf{DiscoveredGoal} - pole jest celem i jest na nim położony fragment. 58 | \end{itemize} 59 | \end{document} 60 | -------------------------------------------------------------------------------- /Dokumentacja/DiagramyKlas/DiagramyKlas.tex: -------------------------------------------------------------------------------- 1 | \documentclass[../Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \section{Diagramy Klas} 5 | W diagramach klas zostały pominięte klasy odpowiedzialne za obsługę połączeń TCP. 6 | Jest to zabieg celowy. Nie chcemy narzucać implementacji obsługi połączeń, aby 7 | nie ograniczać wyboru API. Klasy posiadają specjalne metody puliczne \textbf{AcceptMessage}, 8 | do których należy przekazać odebraną na porcie wiadomość i które implementują 9 | logikę biznesową. Z anaglogicznego powodu nie narzucamy implementacji interfejsów 10 | odpowiedzialnych za wysyłanie wiadomości. 11 | \subfile{Agent.tex} 12 | \subfile{GM.tex} 13 | \subfile{Komunikator.tex} 14 | \end{document} 15 | -------------------------------------------------------------------------------- /Dokumentacja/DiagramyKlas/GM.tex: -------------------------------------------------------------------------------- 1 | \documentclass[../Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \subsection{Moduł GM} 5 | \includeDiagram[width=0.90\textwidth]{resources/GM.eps}{Diagram klas modułu GM} 6 | 7 | \subsubsection{Player} 8 | \paragraph{Zmienne} 9 | \begin{methods} 10 | \method[private Int]{id}{Identyfikator gracza} 11 | \method[private Int]{messageCorrelationId}{Id nadane graczowi przez serwer komunikacyjny, służy do odsyłania wiadomości} 12 | \method[private Team]{team}{Drużyna,w której jest gracz} 13 | \method[private Boolean]{isLeader}{Zmienna informująca czy gracz jest liderem zespołu} 14 | \method[private Piece]{holding}{Zmienna informująca czy niesie fragment} 15 | \method[private AbstractField]{position}{Pozycja gracza na planszy} 16 | \method[private Time]{LockedTill}{Czas do kiedy gracz jest zablokowany} 17 | \method[private MessageSenderService]{messageService}{Obiekt interface'u odpowiedzialnego za komunikację} 18 | \end{methods} 19 | 20 | \paragraph{Metody} 21 | \begin{methods} 22 | \method[public bool]{tryLock(TimeSpan)}{Metoda sprawdza czy gracz jest zablokowany. Jeśli jest zwraca false, jeśli nie jest zakłada nową blokadę czasową na czas podany w argumencie. Wykorzystywana do sprawdzania czy Agent jest w trakcie odczekiwania kary czasowej.} 23 | \method[public void]{Move(Field)}{Metoda poruszająca gracza na wskazane pole. Korzysta z metody obiektu postion. Wysyła agentowi informację przez MessageSenderService.} 24 | \method[public void]{DestroyHolding()}{Metoda niszcząca trzymany fragment.} 25 | \method[public void]{CheckHolding()}{Metoda sprawdzająca czy trzymany fragment jest fragmentem fikcyjnym. Korzysta z metody obiektu holding. Wysyła agentowi informację przez MessageSenderService.} 26 | \method[public void]{Discover(GM)}{Metoda wykonująca akcję odkrycia. Wykorzystuje funkcję klasy GM. Wysyła agentowi informację przez MessageSenderService.} 27 | \method[public bool]{Put()}{Metoda odkładająca fragment w polu, w którym się znajdujemy. Korzysta z metody obiektu postion. Wysyła agentowi informację przez MessageSenderService. Zwraca true jeśli drużynie należy przyznać punkt.} 28 | \method{SetHolding()}{Metoda przypisuje graczowi fragment.} 29 | \method[{internal int[2]}]{GetPosition()}{Metoda pobiera współrzędne gracza, gdzie arr[0] ~ y, arr[1] ~ x } 30 | \end{methods} 31 | 32 | 33 | \subsubsection{Configuration} 34 | \paragraph{Zmienne} 35 | \begin{methods} 36 | \method[public readonly TimeSpan]{movePenalty}{Czas do odczekania po wykonanym ruchu.} 37 | \method[public readonly TimeSpan]{askPenalty}{Czas do odczekania po odpytaniu innego gracza.} 38 | \method[public readonly TimeSpan]{discoveryPenalty}{Czas do odczekania po wykonanym akcji odkrycia.} 39 | \method[public readonly TimeSpan]{putPenalty}{Czas do odczekania po odłożeniu fragmentu na planszę.} 40 | \method[public readonly TimeSpan]{checkPenalty}{Czas do odczekania po sprawdzeniu czy fragment jest fikcyjny.} 41 | \method[public readonly TimeSpan]{responsePenalty}{Czas do odczekania po odpowiedzeniu innemu graczowi.} 42 | \method[public readonly Int]{x}{Szerokość planszy.} 43 | \method[public readonly Int]{y}{Wysokość planszy.} 44 | \method[public readonly Int]{numberOfGoals}{Liczba celow w grze} 45 | \end{methods} 46 | 47 | \subsubsection{AbstractField} 48 | \paragraph{Zmienne} 49 | \begin{methods} 50 | \method[private readonly Int]{x}{Współrzędna x pola na planszy. Oznacza kolumnę.} 51 | \method[private readonly Int]{y}{Współrzędna y pola na planszy. Oznacza wiersz.} 52 | \method[private Player]{WhosHere}{Referencja na obiekt gracza, który znajduje się na polu.} 53 | \method[private AbstractPiece]{pieces}{Lista fragmentów położonych na tym polu.} 54 | \end{methods} 55 | 56 | \paragraph{Metody} 57 | \begin{methods} 58 | \method[public void]{Leave(Player)}{Metoda wywoływana gdy gracz opuszcza pole. Usuwa referencję na gracza w obiekcie.} 59 | \method[public void]{PickUp(Player)}{Metoda abstrakcyjna, która podnosi fragment z planszy i przypisuje go do gracza. Wywoływana jest na żądanie PickPiece} 60 | \method[public bool]{Put(Piece)}{Metoda abstrakcyjna. Wykorzystywana przez Put(AbstractField) z NormalPiece na zasadzie \textbf{wzorca projektowego odwiedzający}.} 61 | \method[public bool]{PutSham(Piece)}{Metoda abstrakcyjna. Wykorzystywana przez Put(AbstractField) z ShamPiece na zasadzie \textbf{wzorca projektowego odwiedzający}. Zwraca true jeśli dane pole było bramkowe} 62 | \method[public bool]{MoveHere(Player)}{Metoda przesuwa gracza na pole.} 63 | \method[public bool]{ContainsPieces()}{Metoda zwraca informację czy pole zawiera fragment.} 64 | \method[{public int[2]}]{GetPosition()}{Metoda zwraca współrzędne pola, gdzie arr[0] ~ y, arr[1] ~ x} 65 | \end{methods} 66 | 67 | \paragraph{NonGoalField : AbstractField} 68 | Klasa reprezentująca pole bramkowe nie będące celem. 69 | \begin{methods} 70 | \method[public bool]{PickUp(Player)}{Nie można podnosić fragmentów z pola bramkowego} 71 | \method[public bool]{Put(Piece)}{Odłożenie nie przyznaje punktów.} 72 | \method[public bool]{PutSham(Piece)}{Odłożenie fragmentu fikcyjneg na dane pole, zwraca false.} 73 | \end{methods} 74 | \paragraph{GoalField : AbstractField} 75 | Klasa reprezentująca pole bramkowe będące celem. 76 | \begin{methods} 77 | \method[public bool]{PickUp(Player)}{Nie można podnosić fragmentów z pola bramkowego} 78 | \method[public bool]{Put(Piece)}{Odłożenie przyznaje punkty, jeśli wcześniej na te pole nie był odłożony inny fragment} 79 | \method[public bool]{PutSham(Piece)}{Odłożenie fragmentu fikcyjneg na dane pole, zwraca true.} 80 | \end{methods} 81 | \paragraph{TaskField : AbstractField} 82 | Klasa reprezentująca pole zadań. 83 | \begin{methods} 84 | \method[public bool]{PickUp(Player)}{Jeśli na danym polu jest fragment, Player podnosi go.} 85 | \method[public bool]{Put(Piece)}{Odłożenie fragmentu na dane pole.} 86 | \method[public bool]{PutSham(Piece)}{Odłożenie fragmentu fikcyjnego na dane pole, zwraca false.} 87 | \end{methods} 88 | \subsubsection{AbstractPiece} 89 | \paragraph{Metody} 90 | \begin{methods} 91 | \method[public bool]{CheckForSham()}{Metoda abstrakcyjna sprawdzająca czy fragment jest fragmentem fikcyjnym.} 92 | \method[public int]{Put(AbstractField)}{Metoda abstrakcyjna odkładająca fragment na pole. Wykorzystuje Put(Piece) z AbstractField na zasadzie \textbf{wzorca projektowego odwiedzający}.} 93 | \end{methods} 94 | 95 | \subsubsection{ShamPiece : AbstractPiece} 96 | \paragraph{Metody} 97 | \begin{methods} 98 | \method[public bool]{CheckForSham()}{Metoda zwraca true.} 99 | \method[public int]{Put(AbstractField)}{Implementacja odwiedzającego, wywołuje PutSham() z AbstractField, jeśli dane pole było bramkowe przekazuje tę informację do gracza.} 100 | \end{methods} 101 | 102 | \subsubsection{NormalPiece : AbstractPiece} 103 | \paragraph{Metody} 104 | \begin{methods} 105 | \method[public bool]{CheckForSham()}{Metoda zwraca false.} 106 | \method[public int]{Put(AbstractField)}{Implementacja odwiedzającego, wywołuje Put() z AbstractField, przekazuje informację czy przyznać punkty graczowi.} 107 | \end{methods} 108 | 109 | \subsubsection{Interface MessageSenderService} 110 | \paragraph{Metody} 111 | \begin{methods} 112 | \method[public void]{SendMessage()}{Wysłanie wiadomości do serwera komunikacyjnego. Używana przez Playera do wysyłania wiadomości.} 113 | \end{methods} 114 | 115 | \subsubsection{GM} 116 | \paragraph{Zmienne} 117 | \begin{methods} 118 | \method[private readonly Dictionary]{players}{Słownik mapujący id gracza z wiadomości na obiekt.} 119 | \method[{private readonly Field[][]}]{map}{Faktyczny stan planszy.} 120 | \method[private Set<(int,int)>]{LegalKnowledgeReplies[2]}{Zbiór par id które oznaczają, że dana odpowiedź z wymianą informacji jest legalna, bo była poprzedzona zapytaniem.} 121 | \method[private Configuration]{conf}{Obiekt parametrów rozgrywki.} 122 | \end{methods} 123 | 124 | \paragraph{Metody} 125 | \begin{methods} 126 | \method[public void]{AcceptMessage()}{Metoda służy do obsługi wiadomości, powinna być wywoływana przez API obsługujące komunikację} 127 | \method[private]{Discover(Field)}{Metoda oblicza wynik akcji discovery} 128 | \method[private void]{GeneratePiece()}{Metoda generuje i rozmieszcza fragmenty na planszy.} 129 | \method[private void]{ForwardKnowledgeQuestion()}{Metoda przekazuje prośbę o informację do właściwego gracza.} 130 | \method[private void]{ForwardKnowledgeReply()}{Metoda przekazuje odpowiedź na zapytanie do właściwego gracza, jeśli odpowiedź jest legalna, czyli jeśli dana odpowiedź była poprzedzona zapytaniem.} 131 | \end{methods} 132 | 133 | \subsubsection{Enum Team} 134 | \begin{itemize} 135 | \item \textbf{Red} - informacja, że gracz jest w drużynie czerwonej, 136 | \item \textbf{Blue} - informacja, że gracz jest w drużynie niebieskiej. 137 | \end{itemize} 138 | \end{document} 139 | -------------------------------------------------------------------------------- /Dokumentacja/DiagramyKlas/Komunikator.tex: -------------------------------------------------------------------------------- 1 | \documentclass[../Dokumentacja.tex]{subfiles} 2 | \begin{document} 3 | 4 | \subsection{Moduł Serwera Komunikacyjnego} 5 | \includeDiagram[ ]{resources/CS.eps}{Diagram klas modułu Serwera Komunikacyjnego} 6 | 7 | \subsubsection{Klasa Communicator} 8 | \paragraph{Zmienne} 9 | \begin{methods} 10 | \method[private Dictionary]{correlation}{Słownik mapujący wewnętrzne id korelacji gry na deskryptory do wysłania wiadomości wykorzystywane przez API do komunikacji} 11 | \method[private Descriptor]{GMDescriptor}{Deskryptor używany do wysyłania wiadomości do GM} 12 | \method[private ISender]{senderService}{Obiekt wykorzystywany do wysyłania wiadomości} 13 | \end{methods} 14 | \paragraph{Metody} 15 | \begin{methods} 16 | \method{SendMessageToAgent(GMMessage)}{Metoda wysyłająca odpowiednią wiadomość do Agenta. Na podstawie id z wiadomości znajduje odpowiedni deskryptor i wysyła na niego payload za pomocą ISender. Wywoływana przez API do komunikacji na zdarzenie otrzymania wiadomości od Agenta} 17 | \method{SendMessageToGM(AgentMessage)}{Metoda wysyłająca odpowiednią wiadomość do Game Mastera. Wywoływana przez API do komunikacji na zdarzenie otrzymania wiadomości od GM} 18 | \end{methods} 19 | 20 | \subsubsection{Klasa GMMessage} 21 | \begin{methods} 22 | \method[public int]{id}{Identyfikator agenta do którego przesyłana jest wiadomość.} 23 | \method[public string]{payload}{Treść wiadomości przesyłana do agenta w formacie JSON.} 24 | \end{methods} 25 | 26 | \subsubsection{Klasa AgentMessage} 27 | \begin{methods} 28 | \method[public string]{payload}{Treść wiadomości przesyłana do Game Mastera w formacie JSON.} 29 | \end{methods} 30 | 31 | \subsubsection{Interfejs ISender} 32 | \begin{methods} 33 | \method[public void]{SendMessage()}{Metoda odpowiedzialna za wysłanie za pomocą API do komunikacji wiadomości do odpowiedniego Agenta lub GM, w zależności od paramterów wywołania } 34 | \end{methods} 35 | 36 | \end{document} 37 | -------------------------------------------------------------------------------- /Dokumentacja/DiagramyKlas/resources/CS.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: cairo 1.16.0 (https://cairographics.org) 3 | %%CreationDate: Sun Nov 24 13:47:12 2019 4 | %%Pages: 1 5 | %%DocumentData: Clean7Bit 6 | %%LanguageLevel: 2 7 | %%BoundingBox: 0 0 292 174 8 | %%EndComments 9 | %%BeginProlog 10 | 50 dict begin 11 | /q { gsave } bind def 12 | /Q { grestore } bind def 13 | /cm { 6 array astore concat } bind def 14 | /w { setlinewidth } bind def 15 | /J { setlinecap } bind def 16 | /j { setlinejoin } bind def 17 | /M { setmiterlimit } bind def 18 | /d { setdash } bind def 19 | /m { moveto } bind def 20 | /l { lineto } bind def 21 | /c { curveto } bind def 22 | /h { closepath } bind def 23 | /re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto 24 | 0 exch rlineto 0 rlineto closepath } bind def 25 | /S { stroke } bind def 26 | /f { fill } bind def 27 | /f* { eofill } bind def 28 | /n { newpath } bind def 29 | /W { clip } bind def 30 | /W* { eoclip } bind def 31 | /BT { } bind def 32 | /ET { } bind def 33 | /BDC { mark 3 1 roll /BDC pdfmark } bind def 34 | /EMC { mark /EMC pdfmark } bind def 35 | /cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def 36 | /Tj { show currentpoint cairo_store_point } bind def 37 | /TJ { 38 | { 39 | dup 40 | type /stringtype eq 41 | { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse 42 | } forall 43 | currentpoint cairo_store_point 44 | } bind def 45 | /cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore 46 | cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def 47 | /Tf { pop /cairo_font exch def /cairo_font_matrix where 48 | { pop cairo_selectfont } if } bind def 49 | /Td { matrix translate cairo_font_matrix matrix concatmatrix dup 50 | /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point 51 | /cairo_font where { pop cairo_selectfont } if } bind def 52 | /Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def 53 | cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def 54 | /g { setgray } bind def 55 | /rg { setrgbcolor } bind def 56 | /d1 { setcachedevice } bind def 57 | /cairo_data_source { 58 | CairoDataIndex CairoData length lt 59 | { CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def } 60 | { () } ifelse 61 | } def 62 | /cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def 63 | /cairo_image { image cairo_flush_ascii85_file } def 64 | /cairo_imagemask { imagemask cairo_flush_ascii85_file } def 65 | %%EndProlog 66 | %%BeginSetup 67 | %%BeginResource: font DejaVuSans 68 | 11 dict begin 69 | /FontType 42 def 70 | /FontName /DejaVuSans def 71 | /PaintType 0 def 72 | /FontMatrix [ 1 0 0 1 0 0 ] def 73 | /FontBBox [ 0 0 0 0 ] def 74 | /Encoding 256 array def 75 | 0 1 255 { Encoding exch /.notdef put } for 76 | Encoding 32 /space put 77 | Encoding 40 /parenleft put 78 | Encoding 41 /parenright put 79 | Encoding 43 /plus put 80 | Encoding 44 /comma put 81 | Encoding 45 /hyphen put 82 | Encoding 49 /one put 83 | Encoding 58 /colon put 84 | Encoding 60 /less put 85 | Encoding 62 /greater put 86 | Encoding 65 /A put 87 | Encoding 67 /C put 88 | Encoding 68 /D put 89 | Encoding 71 /G put 90 | Encoding 73 /I put 91 | Encoding 77 /M put 92 | Encoding 83 /S put 93 | Encoding 84 /T put 94 | Encoding 97 /a put 95 | Encoding 99 /c put 96 | Encoding 100 /d put 97 | Encoding 101 /e put 98 | Encoding 103 /g put 99 | Encoding 105 /i put 100 | Encoding 108 /l put 101 | Encoding 109 /m put 102 | Encoding 110 /n put 103 | Encoding 111 /o put 104 | Encoding 112 /p put 105 | Encoding 114 /r put 106 | Encoding 115 /s put 107 | Encoding 116 /t put 108 | Encoding 117 /u put 109 | Encoding 118 /v put 110 | Encoding 121 /y put 111 | /CharStrings 36 dict dup begin 112 | /.notdef 0 def 113 | /C 1 def 114 | /o 2 def 115 | /m 3 def 116 | /u 4 def 117 | /n 5 def 118 | /i 6 def 119 | /c 7 def 120 | /a 8 def 121 | /t 9 def 122 | /r 10 def 123 | /hyphen 11 def 124 | /e 12 def 125 | /l 13 def 126 | /colon 14 def 127 | /space 15 def 128 | /D 16 def 129 | /y 17 def 130 | /less 18 def 131 | /comma 19 def 132 | /s 20 def 133 | /p 21 def 134 | /greater 22 def 135 | /G 23 def 136 | /M 24 def 137 | /g 25 def 138 | /S 26 def 139 | /v 27 def 140 | /I 28 def 141 | /d 29 def 142 | /plus 30 def 143 | /T 31 def 144 | /A 32 def 145 | /parenleft 33 def 146 | /parenright 34 def 147 | /one 35 def 148 | end readonly def 149 | /sfnts [ 150 | <0001000000090080000300106376742000691d390000162c000001fe6670676d7134766a0000 151 | 182c000000ab676c79666697613f0000009c00001590686561640d13be36000018d800000036 152 | 686865610d9f07910000191000000024686d7478a65a13d200001934000000906c6f63610001 153 | 8368000019c4000000946d6178700491067100001a5800000020707265703b07f10000001a78 154 | 0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec 155 | 310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f272062900010073 156 | ffe3052705f000190036401a0da10eae0a951101a100ae04951791118c1a07190d003014101a 157 | 10fcec32ec310010e4f4ecf4ec10eef6ee30b40f1b1f1b02015d01152e012320001110002132 158 | 3637150e01232000111000213216052766e782ff00fef00110010082e7666aed84feadfe7a01 159 | 86015386ed0562d55f5efec7fed8fed9fec75e5fd34848019f01670168019f47000000020071 160 | ffe30475047b000b0017004a401306b91200b90cb8128c1809120f51031215451810fcecf4ec 161 | 310010e4f4ec10ee3040233f197b007b067f077f087f097f0a7f0b7b0c7f0d7f0e7f0f7f107f 162 | 117b12a019f01911015d012206151416333236353426273200111000232200111000027394ac 163 | ab9593acac93f00112feeef0f1feef011103dfe7c9c9e7e8c8c7e99cfec8feecfeedfec70139 164 | 0113011401380000000100ba0000071d047b0022005a4026061209180f00061d07150c871d20 165 | 03b81bbc19100700110f0808065011080f501c18081a462310fcec32fcfcfcec11123931002f 166 | 3c3ce4f43cc4ec32111217393040133024502470249024a024a024bf24df24ff2409015d013e 167 | 013332161511231134262322061511231134262322061511231133153e01333216042945c082 168 | afbeb972758fa6b972778da6b9b93fb0797aab03897c76f5e2fd5c029ea19cbea4fd87029ea2 169 | 9bbfa3fd870460ae67627c000000000200aeffe30458047b00130014003b401c030900030e01 170 | 06870e118c0a01bc14b80c0d0908140b4e020800461510fcecf439ec3231002fe4e432f4c4ec 171 | 1112173930b46f15c01502015d1311331114163332363511331123350e0123222601aeb87c7c 172 | 95adb8b843b175c1c801cf01ba02a6fd619f9fbea4027bfba0ac6663f003a800000100ba0000 173 | 0464047b001300364019030900030e0106870e11b80cbc0a010208004e0d09080b461410fcec 174 | 32f4ec31002f3ce4f4c4ec1112173930b46015cf1502015d0111231134262322061511231133 175 | 153e013332160464b87c7c95acb9b942b375c1c602a4fd5c029e9f9ebea4fd870460ae6564ef 176 | 000200c100000179061400030007002b400e06be04b100bc020501080400460810fc3cec3231 177 | 002fe4fcec30400b1009400950096009700905015d1333112311331523c1b8b8b8b80460fba0 178 | 0614e90000010071ffe303e7047b0019003f401b00860188040e860d880ab91104b917b8118c 179 | 1a07120d004814451a10fce432ec310010e4f4ec10fef4ee10f5ee30400b0f1b101b801b901b 180 | a01b05015d01152e0123220615141633323637150e0123220011100021321603e74e9d50b3c6 181 | c6b3509d4e4da55dfdfed6012d010655a20435ac2b2be3cdcde32b2baa2424013e010e011201 182 | 3a2300000002007bffe3042d047b000a002500bc4027191f0b17090e00a91706b90e1120861f 183 | ba1cb923b8118c170c001703180d09080b1f030814452610fcecccd4ec323211393931002fc4 184 | e4f4fcf4ec10c6ee10ee11391139123930406e301d301e301f3020302130223f27401d401e40 185 | 1f402040214022501d501e501f50205021502250277027851d871e871f8720872185229027a0 186 | 27f0271e301e301f30203021401e401f40204021501e501f50205021601e601f60206021701e 187 | 701f70207021801e801f80208021185d015d0122061514163332363d01371123350e01232226 188 | 353436332135342623220607353e0133321602bedfac816f99b9b8b83fbc88accbfdfb0102a7 189 | 9760b65465be5af3f00233667b6273d9b4294cfd81aa6661c1a2bdc0127f8b2e2eaa2727fc00 190 | 00010037000002f2059e0013003840190e05080f03a9001101bc08870a0b0809020400081012 191 | 0e461410fc3cc4fc3cc432393931002fecf43cc4ec3211393930b2af1501015d011121152111 192 | 14163b01152322263511233533110177017bfe854b73bdbdd5a28787059efec28ffda0894e9a 193 | 9fd202608f013e000000000100ba0000034a047b001100304014060b0700110b03870eb809bc 194 | 070a06080008461210fcc4ec3231002fe4f4ecc4d4cc11123930b450139f1302015d012e0123 195 | 22061511231133153e0133321617034a1f492c9ca7b9b93aba85132e1c03b41211cbbefdb204 196 | 60ae6663050500000001006401df027f028300030011b6009c020401000410dccc310010d4ec 197 | 301321152164021bfde50283a40000020071ffe3047f047b0014001b00704024001501098608 198 | 880515a90105b90c01bb18b912b80c8c1c1b1502081508004b02120f451c10fcecf4ecc41112 199 | 39310010e4f4ece410ee10ee10f4ee1112393040293f1d701da01dd01df01d053f003f013f02 200 | 3f153f1b052c072f082f092c0a6f006f016f026f156f1b095d71015d0115211e013332363715 201 | 0e01232000111000333200072e0123220607047ffcb20ccdb76ac76263d06bfef4fec70129fc 202 | e20107b802a5889ab90e025e5abec73434ae2a2c0138010a01130143feddc497b4ae9e000001 203 | 00c100000179061400030022b7009702010800460410fcec31002fec30400d10054005500560 204 | 057005f00506015d13331123c1b8b80614f9ec00000200f0000001c3042300030007001c400e 205 | 068304a60083020501030400180810fc3cec3231002fecf4ec303733152311331523f0d3d3d3 206 | d3fefe0423fe0000000200c9000005b005d500080011002e4015009509810195100802100a00 207 | 05190d32001c09041210fcecf4ec113939393931002fecf4ec30b2601301015d011133200011 208 | 1000212521200011100029010193f40135011ffee1fecbfe42019f01b20196fe68fe50fe6105 209 | 2ffb770118012e012c0117a6fe97fe80fe7efe9600000001003dfe56047f0460000f018b4043 210 | 0708020911000f0a110b0a00000f0e110f000f0d110c0d00000f0d110e0d0a0b0a0c110b0b0a 211 | 420d0b0910000b058703bd0e0bbc100e0d0c0a09060300080f040f0b1010d44bb00a544bb008 212 | 545b58b9000b004038594bb0145458b9000bffc03859c4c4111739310010e432f4ec11391139 213 | 1239304b5358071005ed071008ed071008ed071005ed071008ed0705ed173259220140f00600 214 | 05080609030d160a170d100d230d350d490a4f0a4e0d5a095a0a6a0a870d800d930d120a000a 215 | 09060b050c0b0e0b0f1701150210041005170a140b140c1a0e1a0f2700240124022004200529 216 | 082809250a240b240c270d2a0e2a0f201137003501350230043005380a360b360c380d390e39 217 | 0f30114100400140024003400440054006400740084209450a470d490e490f40115400510151 218 | 025503500450055606550756085709570a550b550c590e590f501166016602680a690e690f60 219 | 117b08780e780f89008a09850b850c890d890e890f9909950b950c9a0e9a0fa40ba40cab0eab 220 | 0fb011cf11df11ff11655d005d050e012b01353332363f01013309013302934e947c936c4c54 221 | 3321fe3bc3015e015ec368c87a9a488654044efc94036c000000000100d9005e05db04a60006 222 | 004d402a029c030403019c0001040403019c0201050605009c06054205040201000503a806a7 223 | 070102002404230710fcec3239310010f4ec1739304b53580704ed071008ed071008ed071004 224 | ed592209021501350105dbfbf80408fafe050203f0fe91fe93b601d1a601d1000001009eff12 225 | 01c300fe00050019400c039e0083060304011900180610fcecd4cc310010fcec303733150323 226 | 13f0d3a48152feacfec001400001006fffe303c7047b002700e7403c0d0c020e0b531f1e0809 227 | 02070a531f1f1e420a0b1e1f041500860189041486158918b91104b925b8118c281e0a0b1f1b 228 | 0700521b080e07081422452810fcc4ecd4ece4111239393939310010e4f4ec10fef5ee10f5ee 229 | 121739304b535807100eed111739070eed1117395922b2002701015d406d1c0a1c0b1c0c2e09 230 | 2c0a2c0b2c0c3b093b0a3b0b3b0c0b200020012402280a280b2a132f142f152a16281e281f29 231 | 2029212427860a860b860c860d12000000010202060a060b030c030d030e030f03100319031a 232 | 031b031c041d09272f293f295f297f2980299029a029f029185d005d7101152e012322061514 233 | 161f011e0115140623222627351e013332363534262f012e01353436333216038b4ea85a8989 234 | 62943fc4a5f7d85ac36c66c661828c65ab40ab98e0ce66b4043fae282854544049210e2a9989 235 | 9cb62323be353559514b50250f2495829eac1e000000000200bafe5604a4047b0010001c003e 236 | 401b1ab9000e14b90508b80e8c01bd03bc1d11120b471704000802461d10fcec3232f4ec3100 237 | 10e4e4e4f4c4ec10c4ee304009601e801ea01ee01e04015d2511231133153e01333200111002 238 | 2322260134262322061514163332360173b9b93ab17bcc00ffffcc7bb10238a79292a7a79292 239 | a7a8fdae060aaa6461febcfef8fef8febc6101ebcbe7e7cbcbe7e7000000000100d9005e05db 240 | 04a60006004f402b069c0006030403059c040403009c010201069c0506020201420605030200 241 | 0504a801a7070602240400230710fc3cec39310010f4ec1739304b5358071008ed071004ed07 242 | 1004ed071008ed592213350115013501d90502fafe040603f0b6fe2fa6fe2fb6016d00000001 243 | 0073ffe3058b05f0001d0039402000051b0195031b950812a111ae15950e91088c1e02001c11 244 | 34043318190b101e10fcecfce4fcc4310010e4f4ecf4ec10fed4ee1139393025112135211106 245 | 0423200011100021320417152e0123200011100021323604c3feb6021275fee6a0fea2fe7501 246 | 8b015e9201076f70fc8bfeeefeed011301126ba8d50191a6fd7f53550199016d016e01994846 247 | d75f60fecefed1fed2fece250000000100c90000061f05d5000c00bf40340311070807021101 248 | 0208080702110302090a0901110a0a09420a070203080300af080b050908030201050a061c04 249 | 3e0a1c00040d10fcecfcec11173931002f3cc4ec32111739304b5358071005ed071008ed0710 250 | 08ed071005ed5922b2700e01015d405603070f080f09020a15021407130a260226072007260a 251 | 200a3407350a69027c027b07790a80028207820a90021604010b0313011b0323012c03270828 252 | 0934013c035608590965086a097608790981018d0395019b03145d005d132109012111231101 253 | 23011123c9012d017d017f012dc5fe7fcbfe7fc405d5fc0803f8fa2b051ffc000400fae10000 254 | 00020071fe56045a047b000b0028004a4023190c1d0912861316b90f03b92623b827bc09b90f 255 | bd1a1d261900080c4706121220452910fcc4ecf4ec323231002fc4e4ece4f4c4ec10fed5ee11 256 | 12393930b6602a802aa02a03015d01342623220615141633323617100221222627351e013332 257 | 363d010e0123220211101233321617353303a2a59594a5a59495a5b8fefefa61ac51519e52b5 258 | b439b27ccefcfcce7cb239b8023dc8dcdcc8c7dcdcebfee2fee91d1eb32c2abdbf5b6362013a 259 | 01030104013a6263aa0000010087ffe304a205f00027007e403c0d0c020e0b021e1f1e080902 260 | 070a021f1f1e420a0b1e1f0415010015a11494189511049500942591118c281e0a0b1f1b0700 261 | 221b190e2d071914222810dcc4ecfcece4111239393939310010e4f4e4ec10eef6ee10c61117 262 | 39304b535807100eed11173907100eed1117395922b20f2901015db61f292f294f29035d0115 263 | 2e012322061514161f011e0115140421222627351e013332363534262f012e01353424333216 264 | 044873cc5fa5b377a67ae2d7feddfee76aef807bec72adbc879a7be2ca0117f569da05a4c537 265 | 36807663651f192bd9b6d9e0302fd04546887e6e7c1f182dc0abc6e426000001003d0000047f 266 | 0460000600fb402703110405040211010205050402110302060006011100000642020300bf05 267 | 06050302010504000710d44bb00a5458b90000004038594bb014544bb015545b58b90000ffc0 268 | 3859c4173931002fec3239304b5358071005ed071008ed071008ed071005ed592201408e4802 269 | 6a027b027f02860280029102a402080600060109030904150015011a031a0426002601290329 270 | 042008350035013a033a04300846004601490349044605480640085600560159035904500866 271 | 00660169036904670568066008750074017b037b0475057a0685008501890389048905860696 272 | 00960197029a03980498059706a805a706b008c008df08ff083e5d005d133309013301233dc3 273 | 015e015ec3fe5cfa0460fc5403acfba00000000100c90000019305d50003002eb700af02011c 274 | 00040410fc4bb0105458b9000000403859ec31002fec3001400d30054005500560058f059f05 275 | 065d13331123c9caca05d5fa2b0000020071ffe3045a06140010001c003840191ab9000e14b9 276 | 05088c0eb801970317040008024711120b451d10fcecf4ec323231002fece4f4c4ec10c4ee30 277 | b6601e801ea01e03015d0111331123350e012322021110003332160114163332363534262322 278 | 0603a2b8b83ab17ccbff00ffcb7cb1fdc7a79292a8a89292a703b6025ef9eca8646101440108 279 | 0108014461fe15cbe7e7cbcbe7e7000100d9000005db0504000b002340110009019c07030502 280 | 150400170a0615080c10dcfc3cfc3cec31002fd43cfc3cc43001112115211123112135211103 281 | ae022dfdd3a8fdd3022d0504fdd3aafdd3022daa022d0001fffa000004e905d50007004a400e 282 | 0602950081040140031c0040050810d4e4fce431002ff4ec3230014bb00a5458bd0008004000 283 | 0100080008ffc03811373859401300091f00100110021f071009400970099f09095d03211521 284 | 112311210604effdeecbfdee05d5aafad5052b00000200100000056805d50002000a00c24041 285 | 00110100040504021105050401110a030a0011020003030a0711050406110505040911030a08 286 | 110a030a4200030795010381090509080706040302010009050a0b10d4c4173931002f3ce4d4 287 | ec1239304b5358071005ed0705ed071005ed0705ed071008ed071005ed071005ed071008ed59 288 | 22b2200c01015d40420f010f020f070f080f005800760070008c000907010802060309041601 289 | 190256015802500c67016802780176027c0372047707780887018802800c980299039604175d 290 | 005d090121013301230321032302bcfeee0225fe7be50239d288fd5f88d5050efd1903aefa2b 291 | 017ffe810000000100b0fef2027b0612000d0037400f069800970e0d070003120600130a0e10 292 | dc4bb0135458b9000affc038594bb00f5458b9000a00403859e432ec113939310010fcec3001 293 | 06021514121723260235341237027b86828385a0969594970612e6fe3ee7e7fe3be5eb01c6e0 294 | df01c4ec000100a4fef2026f0612000d001f400f079800970e0701000b12041308000e10dc3c 295 | f4ec113939310010fcec301333161215140207233612353402a4a096959596a08583830612ec 296 | fe3cdfe0fe3aebe501c5e7e701c20000000100e10000045a05d5000a004040154203a00402a0 297 | 05810700a009081f061c03001f010b10d44bb00f5458b9000100403859ecc4fcec31002fec32 298 | f4ecd4ec304b5358592201b40f030f04025d3721110535253311211521fe014afe990165ca01 299 | 4afca4aa047348b848fad5aa0000013500b800cb00cb00c100aa009c01a600b8006600000071 300 | 00cb00a002b20085007500b800c301cb0189022d00cb00a600f000d300aa008700cb03aa0400 301 | 014a003300cb000000d9050200f4015400b4009c01390114013907060400044e04b4045204b8 302 | 04e704cd0037047304cd04600473013303a2055605a60556053903c5021200c9001f00b801df 303 | 007300ba03e9033303bc0444040e00df03cd03aa00e503aa0404000000cb008f00a4007b00b8 304 | 0014016f007f027b0252008f00c705cd009a009a006f00cb00cd019e01d300f000ba018300d5 305 | 009803040248009e01d500c100cb00f600830354027f00000333026600d300c700a400cd008f 306 | 009a0073040005d5010a00fe022b00a400b4009c00000062009c0000001d032d05d505d505d5 307 | 05f0007f007b005400a406b80614072301d300b800cb00a601c301ec069300a000d3035c0371 308 | 03db0185042304a80448008f0139011401390360008f05d5019a061407230666017904600460 309 | 0460047b009c00000277046001aa00e904600762007b00c5007f027b000000b4025205cd0066 310 | 00bc00660077061000cd013b01850389008f007b0000001d00cd074a042f009c009c0000077d 311 | 006f0000006f0335006a006f007b00ae00b2002d0396008f027b00f600830354063705f6008f 312 | 009c04e10266008f018d02f600cd03440029006604ee00730000140000960000b70706050403 313 | 0201002c2010b002254964b040515820c859212d2cb002254964b040515820c859212d2c2010 314 | 0720b00050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920 315 | b8ffff5058041b0559b0051cb0032508e12d2c4b505820b0fd454459212d2cb002254560442d 316 | 2c4b5358b00225b0022545445921212d2c45442d2cb00225b0022549b00525b005254960b020 317 | 6368208a108a233a8a10653a2d000001000000025eb84b18632e5f0f3cf5001f080000000000 318 | d3d90a2c00000000d3d90a2cf7d6fc4c0e5909dc00000008000000010000000000010000076d 319 | fe1d00000efef7d6fa510e5900010000000000000000000000000000002404cd006605960073 320 | 04e5007107cb00ba051200ae051200ba023900c10466007104e7007b03230037034a00ba02e3 321 | 006404ec0071023900c102b200f0028b0000062900c904bc003d06b400d9028b009e042b006f 322 | 051400ba06b400d90633007306e700c9051400710514008704bc003d025c00c90514007106b4 323 | 00d904e3fffa05790010031f00b0031f00a4051700e10000000000000044000000dc00000180 324 | 00000244000002c800000340000003900000042800000554000005d0000006400000066c0000 325 | 07400000077c000007bc000007bc0000083c00000a0800000a8000000ab800000c1800000cb8 326 | 00000d3000000dd800000ed400000f9c00001094000011b80000120000001298000012ec0000 327 | 135c00001458000014c800001520000015900001000000240354002b0068000c000200100099 328 | 000800000415021600080004b8028040fffbfe03fa1403f92503f83203f79603f60e03f5fe03 329 | f4fe03f32503f20e03f19603f02503ef8a4105effe03ee9603ed9603ecfa03ebfa03eafe03e9 330 | 3a03e84203e7fe03e63203e5e45305e59603e48a4105e45303e3e22f05e3fa03e22f03e1fe03 331 | e0fe03df3203de1403dd9603dcfe03db1203da7d03d9bb03d8fe03d68a4105d67d03d5d44705 332 | d57d03d44703d3d21b05d3fe03d21b03d1fe03d0fe03cffe03cefe03cd9603cccb1e05ccfe03 333 | cb1e03ca3203c9fe03c6851105c61c03c51603c4fe03c3fe03c2fe03c1fe03c0fe03bffe03be 334 | fe03bdfe03bcfe03bbfe03ba1103b9862505b9fe03b8b7bb05b8fe03b7b65d05b7bb03b78004 335 | b6b52505b65d40ff03b64004b52503b4fe03b39603b2fe03b1fe03b0fe03affe03ae6403ad0e 336 | 03acab2505ac6403abaa1205ab2503aa1203a98a4105a9fa03a8fe03a7fe03a6fe03a51203a4 337 | fe03a3a20e05a33203a20e03a16403a08a4105a096039ffe039e9d0c059efe039d0c039c9b19 338 | 059c64039b9a10059b19039a1003990a0398fe0397960d0597fe03960d03958a410595960394 339 | 930e05942803930e0392fa039190bb0591fe03908f5d0590bb039080048f8e25058f5d038f40 340 | 048e25038dfe038c8b2e058cfe038b2e038a8625058a410389880b05891403880b0387862505 341 | 8764038685110586250385110384fe038382110583fe0382110381fe0380fe037ffe0340ff7e 342 | 7d7d057efe037d7d037c64037b5415057b25037afe0379fe03780e03770c03760a0375fe0374 343 | fa0373fa0372fa0371fa0370fe036ffe036efe036c21036bfe036a1142056a530369fe03687d 344 | 036711420566fe0365fe0364fe0363fe0362fe03613a0360fa035e0c035dfe035bfe035afe03 345 | 59580a0559fa03580a035716190557320356fe03555415055542035415035301100553180352 346 | 1403514a130551fe03500b034ffe034e4d10054efe034d10034cfe034b4a13054bfe034a4910 347 | 054a1303491d0d05491003480d0347fe0346960345960344fe0343022d0543fa0342bb03414b 348 | 0340fe033ffe033e3d12053e14033d3c0f053d12033c3b0d053c40ff0f033b0d033afe0339fe 349 | 033837140538fa033736100537140336350b05361003350b03341e03330d0332310b0532fe03 350 | 310b03302f0b05300d032f0b032e2d09052e10032d09032c32032b2a25052b64032a2912052a 351 | 25032912032827250528410327250326250b05260f03250b0324fe0323fe03220f0321011005 352 | 2112032064031ffa031e1d0d051e64031d0d031c1142051cfe031bfa031a42031911420519fe 353 | 031864031716190517fe031601100516190315fe0314fe0313fe031211420512fe0311022d05 354 | 114203107d030f64030efe030d0c16050dfe030c0110050c16030bfe030a100309fe0308022d 355 | 0508fe030714030664030401100504fe03401503022d0503fe0302011005022d0301100300fe 356 | 0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 357 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 358 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 359 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 360 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 361 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 362 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 363 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 364 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d00> 365 | ] def 366 | /f-0-0 currentdict end definefont pop 367 | %%EndResource 368 | %%BeginResource: font DejaVuSans 369 | 11 dict begin 370 | /FontType 42 def 371 | /FontName /DejaVuSans def 372 | /PaintType 0 def 373 | /FontMatrix [ 1 0 0 1 0 0 ] def 374 | /FontBBox [ 0 0 0 0 ] def 375 | /Encoding 256 array def 376 | 0 1 255 { Encoding exch /.notdef put } for 377 | Encoding 73 /I put 378 | Encoding 83 /S put 379 | Encoding 97 /a put 380 | Encoding 99 /c put 381 | Encoding 100 /d put 382 | Encoding 101 /e put 383 | Encoding 102 /f put 384 | Encoding 105 /i put 385 | Encoding 110 /n put 386 | Encoding 114 /r put 387 | Encoding 116 /t put 388 | Encoding 171 /guillemotleft put 389 | Encoding 187 /guillemotright put 390 | /CharStrings 14 dict dup begin 391 | /.notdef 0 def 392 | /guillemotleft 1 def 393 | /i 2 def 394 | /n 3 def 395 | /t 4 def 396 | /e 5 def 397 | /r 6 def 398 | /f 7 def 399 | /a 8 def 400 | /c 9 def 401 | /guillemotright 10 def 402 | /I 11 def 403 | /S 12 def 404 | /d 13 def 405 | end readonly def 406 | /sfnts [ 407 | <0001000000090080000300106376742000691d3900000938000001fe6670676d7134766a0000 408 | 0b38000000ab676c7966b75f4c380000009c0000089c686561640d13be3600000be400000036 409 | 686865610d9f077b00000c1c00000024686d747839dd077e00000c40000000386c6f63610000 410 | 3b9000000c780000003c6d617870047b067100000cb400000020707265703b07f10000000cd4 411 | 0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec 412 | 310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f27206290002009e 413 | 008d042504230006000d0086404903e804050402e8010205050402e8030206000601e8000006 414 | 0ae80b0c0b09e808090c0c0b09e80a090d070d08e807070d4209020b04e70700a60e090c0502 415 | 0703006f050a076f0c6e0e10fcfc3cd4ec321139111239310010f43cec323939304b53580710 416 | 04ed071008ed071008ed071004ed071004ed071008ed071008ed071004ed5922011509011501 417 | 35131509011501350425fed3012dfe2b23fed3012dfe2b0423bffef4fef4bf01a25201a2bffe 418 | f4fef4bf01a252000000000200c100000179061400030007002b400e06be04b100bc02050108 419 | 0400460810fc3cec3231002fe4fcec30400b1009400950096009700905015d13331123113315 420 | 23c1b8b8b8b80460fba00614e900000100ba00000464047b001300364019030900030e010687 421 | 0e11b80cbc0a010208004e0d09080b461410fcec32f4ec31002f3ce4f4c4ec1112173930b460 422 | 15cf1502015d0111231134262322061511231133153e013332160464b87c7c95acb9b942b375 423 | c1c602a4fd5c029e9f9ebea4fd870460ae6564ef00010037000002f2059e0013003840190e05 424 | 080f03a9001101bc08870a0b08090204000810120e461410fc3cc4fc3cc432393931002fecf4 425 | 3cc4ec3211393930b2af1501015d01112115211114163b01152322263511233533110177017b 426 | fe854b73bdbdd5a28787059efec28ffda0894e9a9fd202608f013e00000000020071ffe3047f 427 | 047b0014001b00704024001501098608880515a90105b90c01bb18b912b80c8c1c1b15020815 428 | 08004b02120f451c10fcecf4ecc4111239310010e4f4ece410ee10ee10f4ee1112393040293f 429 | 1d701da01dd01df01d053f003f013f023f153f1b052c072f082f092c0a6f006f016f026f156f 430 | 1b095d71015d0115211e0133323637150e01232000111000333200072e0123220607047ffcb2 431 | 0ccdb76ac76263d06bfef4fec70129fce20107b802a5889ab90e025e5abec73434ae2a2c0138 432 | 010a01130143feddc497b4ae9e00000100ba0000034a047b001100304014060b0700110b0387 433 | 0eb809bc070a06080008461210fcc4ec3231002fe4f4ecc4d4cc11123930b450139f1302015d 434 | 012e012322061511231133153e0133321617034a1f492c9ca7b9b93aba85132e1c03b41211cb 435 | befdb20460ae6663050500000001002f000002f8061400130059401c0510010c08a906018700 436 | 970e06bc0a02130700070905080d0f0b4c1410fc4bb00a5458b9000b004038594bb00e5458b9 437 | 000bffc038593cc4fc3cc4c412393931002fe432fcec10ee321239393001b640155015a01503 438 | 5d01152322061d012115211123112335333534363302f8b0634d012ffed1b9b0b0aebd061499 439 | 5068638ffc2f03d18f4ebbab0002007bffe3042d047b000a002500bc4027191f0b17090e00a9 440 | 1706b90e1120861fba1cb923b8118c170c001703180d09080b1f030814452610fcecccd4ec32 441 | 3211393931002fc4e4f4fcf4ec10c6ee10ee11391139123930406e301d301e301f3020302130 442 | 223f27401d401e401f402040214022501d501e501f50205021502250277027851d871e871f87 443 | 20872185229027a027f0271e301e301f30203021401e401f40204021501e501f50205021601e 444 | 601f60206021701e701f70207021801e801f80208021185d015d0122061514163332363d0137 445 | 1123350e01232226353436332135342623220607353e0133321602bedfac816f99b9b8b83fbc 446 | 88accbfdfb0102a79760b65465be5af3f00233667b6273d9b4294cfd81aa6661c1a2bdc0127f 447 | 8b2e2eaa2727fc0000010071ffe303e7047b0019003f401b00860188040e860d880ab91104b9 448 | 17b8118c1a07120d004814451a10fce432ec310010e4f4ec10fef4ee10f5ee30400b0f1b101b 449 | 801b901ba01b05015d01152e0123220615141633323637150e0123220011100021321603e74e 450 | 9d50b3c6c6b3509d4e4da55dfdfed6012d010655a20435ac2b2be3cdcde32b2baa2424013e01 451 | 0e0112013a230000000200c1008d044804230006000d008640490ce80d0c090a090be80a0a09 452 | 0de80708070ce80b0c08080705e8060502030204e803030206e800010005e80405010100420c 453 | 050a03e70700a60e0c08010500086f0a07016f0300700e10fc3cfcd43cec1239111239310010 454 | f43cec323939304b5358071008ed071004ed071004ed071008ed071008ed071004ed071004ed 455 | 071008ed59221301150135090125011501350901c101d5fe2b012dfed301b201d5fe2b012dfe 456 | d30423fe5e52fe5ebf010c010cbffe5e52fe5ebf010c010c0000000100c90000019305d50003 457 | 002eb700af02011c00040410fc4bb0105458b9000000403859ec31002fec3001400d30054005 458 | 500560058f059f05065d13331123c9caca05d5fa2b0000010087ffe304a205f00027007e403c 459 | 0d0c020e0b021e1f1e080902070a021f1f1e420a0b1e1f0415010015a1149418951104950094 460 | 2591118c281e0a0b1f1b0700221b190e2d071914222810dcc4ecfcece4111239393939310010 461 | e4f4e4ec10eef6ee10c6111739304b535807100eed11173907100eed1117395922b20f290101 462 | 5db61f292f294f29035d01152e012322061514161f011e0115140421222627351e0133323635 463 | 34262f012e01353424333216044873cc5fa5b377a67ae2d7feddfee76aef807bec72adbc879a 464 | 7be2ca0117f569da05a4c53736807663651f192bd9b6d9e0302fd04546887e6e7c1f182dc0ab 465 | c6e4260000020071ffe3045a06140010001c003840191ab9000e14b905088c0eb80197031704 466 | 0008024711120b451d10fcecf4ec323231002fece4f4c4ec10c4ee30b6601e801ea01e03015d 467 | 0111331123350e0123220211100033321601141633323635342623220603a2b8b83ab17ccbff 468 | 00ffcb7cb1fdc7a79292a8a89292a703b6025ef9eca86461014401080108014461fe15cbe7e7 469 | cbcbe7e7013500b800cb00cb00c100aa009c01a600b800660000007100cb00a002b200850075 470 | 00b800c301cb0189022d00cb00a600f000d300aa008700cb03aa0400014a003300cb000000d9 471 | 050200f4015400b4009c01390114013907060400044e04b4045204b804e704cd0037047304cd 472 | 04600473013303a2055605a60556053903c5021200c9001f00b801df007300ba03e9033303bc 473 | 0444040e00df03cd03aa00e503aa0404000000cb008f00a4007b00b80014016f007f027b0252 474 | 008f00c705cd009a009a006f00cb00cd019e01d300f000ba018300d5009803040248009e01d5 475 | 00c100cb00f600830354027f00000333026600d300c700a400cd008f009a0073040005d5010a 476 | 00fe022b00a400b4009c00000062009c0000001d032d05d505d505d505f0007f007b005400a4 477 | 06b80614072301d300b800cb00a601c301ec069300a000d3035c037103db0185042304a80448 478 | 008f0139011401390360008f05d5019a0614072306660179046004600460047b009c00000277 479 | 046001aa00e904600762007b00c5007f027b000000b4025205cd006600bc00660077061000cd 480 | 013b01850389008f007b0000001d00cd074a042f009c009c0000077d006f0000006f0335006a 481 | 006f007b00ae00b2002d0396008f027b00f600830354063705f6008f009c04e10266008f018d 482 | 02f600cd03440029006604ee00730000140000960000b707060504030201002c2010b0022549 483 | 64b040515820c859212d2cb002254964b040515820c859212d2c20100720b00050b00d7920b8 484 | ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920b8ffff5058041b0559b0 485 | 051cb0032508e12d2c4b505820b0fd454459212d2cb002254560442d2c4b5358b00225b00225 486 | 45445921212d2c45442d2cb00225b0022549b00525b005254960b0206368208a108a233a8a10 487 | 653a2d000001000000025eb882b1acbc5f0f3cf5001f080000000000d3d90a2c00000000d3d9 488 | 0a2cf7d6fc4c0e5909dc00000008000000010000000000010000076dfe1d00000efef7d6fa51 489 | 0e5900010000000000000000000000000000000e04cd006604e5009e023900c1051200ba0323 490 | 003704ec0071034a00ba02d1002f04e7007b0466007104e500c1025c00c90514008705140071 491 | 00000000000000440000011000000160000001d8000002540000032800000398000004300000 492 | 055c000005f4000006c40000070c000008040000089c00010000000e0354002b0068000c0002 493 | 00100099000800000415021600080004b8028040fffbfe03fa1403f92503f83203f79603f60e 494 | 03f5fe03f4fe03f32503f20e03f19603f02503ef8a4105effe03ee9603ed9603ecfa03ebfa03 495 | eafe03e93a03e84203e7fe03e63203e5e45305e59603e48a4105e45303e3e22f05e3fa03e22f 496 | 03e1fe03e0fe03df3203de1403dd9603dcfe03db1203da7d03d9bb03d8fe03d68a4105d67d03 497 | d5d44705d57d03d44703d3d21b05d3fe03d21b03d1fe03d0fe03cffe03cefe03cd9603cccb1e 498 | 05ccfe03cb1e03ca3203c9fe03c6851105c61c03c51603c4fe03c3fe03c2fe03c1fe03c0fe03 499 | bffe03befe03bdfe03bcfe03bbfe03ba1103b9862505b9fe03b8b7bb05b8fe03b7b65d05b7bb 500 | 03b78004b6b52505b65d40ff03b64004b52503b4fe03b39603b2fe03b1fe03b0fe03affe03ae 501 | 6403ad0e03acab2505ac6403abaa1205ab2503aa1203a98a4105a9fa03a8fe03a7fe03a6fe03 502 | a51203a4fe03a3a20e05a33203a20e03a16403a08a4105a096039ffe039e9d0c059efe039d0c 503 | 039c9b19059c64039b9a10059b19039a1003990a0398fe0397960d0597fe03960d03958a4105 504 | 95960394930e05942803930e0392fa039190bb0591fe03908f5d0590bb039080048f8e25058f 505 | 5d038f40048e25038dfe038c8b2e058cfe038b2e038a8625058a410389880b05891403880b03 506 | 878625058764038685110586250385110384fe038382110583fe0382110381fe0380fe037ffe 507 | 0340ff7e7d7d057efe037d7d037c64037b5415057b25037afe0379fe03780e03770c03760a03 508 | 75fe0374fa0373fa0372fa0371fa0370fe036ffe036efe036c21036bfe036a1142056a530369 509 | fe03687d036711420566fe0365fe0364fe0363fe0362fe03613a0360fa035e0c035dfe035bfe 510 | 035afe0359580a0559fa03580a035716190557320356fe035554150555420354150353011005 511 | 531803521403514a130551fe03500b034ffe034e4d10054efe034d10034cfe034b4a13054bfe 512 | 034a4910054a1303491d0d05491003480d0347fe0346960345960344fe0343022d0543fa0342 513 | bb03414b0340fe033ffe033e3d12053e14033d3c0f053d12033c3b0d053c40ff0f033b0d033a 514 | fe0339fe033837140538fa033736100537140336350b05361003350b03341e03330d0332310b 515 | 0532fe03310b03302f0b05300d032f0b032e2d09052e10032d09032c32032b2a25052b64032a 516 | 2912052a25032912032827250528410327250326250b05260f03250b0324fe0323fe03220f03 517 | 210110052112032064031ffa031e1d0d051e64031d0d031c1142051cfe031bfa031a42031911 518 | 420519fe031864031716190517fe031601100516190315fe0314fe0313fe031211420512fe03 519 | 11022d05114203107d030f64030efe030d0c16050dfe030c0110050c16030bfe030a100309fe 520 | 0308022d0508fe030714030664030401100504fe03401503022d0503fe0302011005022d0301 521 | 100300fe0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 522 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 523 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 524 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 525 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b 526 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 527 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 528 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 529 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d00> 530 | ] def 531 | /f-1-0 currentdict end definefont pop 532 | %%EndResource 533 | %%EndSetup 534 | %%Page: 1 1 535 | %%BeginPageSetup 536 | %%PageBoundingBox: 0 0 292 174 537 | %%EndPageSetup 538 | q 0 0 292 174 rectclip 539 | 1 0 0 -1 0 174 cm q 540 | 1 g 541 | 2.812 0.562 180 77.996 re f 542 | 0.219608 g 543 | 1.125 w 544 | 0 J 545 | 0 j 546 | [] 0.0 d 547 | 4 M q 1 0 0 1 0 0 cm 548 | 2.812 0.562 180 77.996 re S Q 549 | 0 g 550 | BT 551 | 9.138022 0 0 -9 59.0625 12.666525 Tm 552 | /f-0-0 1 Tf 553 | [(Commun)-3(icator)]TJ 554 | ET 555 | 0.219608 g 556 | q 1 0 0 1 0 0 cm 557 | 3.562 18.539 m 182.062 18.539 l S Q 558 | 0 g 559 | BT 560 | 8.410375 0 0 -8.25 7.3125 29.196899 Tm 561 | /f-0-0 1 Tf 562 | [(-cor)16(r)20(elation: Dictiona)-3(ry)]TJ 563 | 8.492528 0 0 -8.25 7.3125 38.800424 Tm 564 | [(-)-38(GMDescr)-3(iptor)18(: Desc)-3(riptor)]TJ 565 | 8.676343 0 0 -8.25 7.3125 48.403948 Tm 566 | [(-messageSer)-3(vice: ISen)-3(der)]TJ 567 | ET 568 | 0.219608 g 569 | q 1 0 0 1 0 0 cm 570 | 3.562 53.348 m 182.062 53.348 l S Q 571 | 0 g 572 | BT 573 | 8.566558 0 0 -8.25 7.3125 64.007475 Tm 574 | /f-0-0 1 Tf 575 | [(+SendMessa)-3(geT)170(oAgent\(GMM)-3(essage\))]TJ 576 | 0 -1.164055 Td 577 | [(+SendMessa)-3(geT)170(oGM\(AgentM)-3(essage\))]TJ 578 | ET 579 | 1 g 580 | 0.562 128.438 79.5 39.578 re f 581 | 0.219608 g 582 | q 1 0 0 1 0 0 cm 583 | 0.562 128.438 79.5 39.578 re S Q 584 | 0 g 585 | BT 586 | 9.495347 0 0 -9 5.4375 140.541527 Tm 587 | /f-0-0 1 Tf 588 | [(AgentMessa)-3(ge)]TJ 589 | ET 590 | 0.219608 g 591 | q 1 0 0 1 0 0 cm 592 | 1.312 146.414 m 79.312 146.414 l S Q 593 | 0 g 594 | BT 595 | 8.449438 0 0 -8.25 5.0625 157.071899 Tm 596 | /f-0-0 1 Tf 597 | [(+payload: str)-3(ing)]TJ 598 | ET 599 | 0.219608 g 600 | q 1 0 0 1 0 0 cm 601 | 1.312 162.016 m 79.312 162.016 l S Q 602 | 1 g 603 | 106.312 123.562 79.5 49.184 re f 604 | 0.219608 g 605 | q 1 0 0 1 0 0 cm 606 | 106.312 123.562 79.5 49.184 re S Q 607 | 0 g 608 | BT 609 | 9.338521 0 0 -9 117.9375 135.666527 Tm 610 | /f-0-0 1 Tf 611 | [(GMMessa)-3(ge)]TJ 612 | ET 613 | 0.219608 g 614 | q 1 0 0 1 0 0 cm 615 | 107.062 141.539 m 185.062 141.539 l S Q 616 | 0 g 617 | BT 618 | 8.286316 0 0 -8.25 110.8125 152.196899 Tm 619 | /f-0-0 1 Tf 620 | [(+id: int)]TJ 621 | 8.449438 0 0 -8.25 110.8125 161.800426 Tm 622 | [(+payload: str)-3(ing)]TJ 623 | ET 624 | 0.219608 g 625 | q 1 0 0 1 0 0 cm 626 | 107.062 166.746 m 185.062 166.746 l S Q 627 | 1 g 628 | 209.438 14.438 81.75 50.059 re f 629 | 0.219608 g 630 | q 1 0 0 1 0 0 cm 631 | 209.438 14.438 81.75 50.059 re S Q 632 | 0 g 633 | BT 634 | 9.23394 0 0 -9 224.0625 26.541524 Tm 635 | /f-1-0 1 Tf 636 | [(\253interface\273)]TJ 637 | 9.565836 0 0 -9 231.9375 37.018049 Tm 638 | (ISender)Tj 639 | ET 640 | 0.219608 g 641 | q 1 0 0 1 0 0 cm 642 | 210.188 42.891 m 290.438 42.891 l S Q 643 | q 1 0 0 1 0 0 cm 644 | 210.188 48.891 m 290.438 48.891 l S Q 645 | 0 g 646 | BT 647 | 8.535289 0 0 -8.25 213.9375 59.548428 Tm 648 | /f-0-0 1 Tf 649 | [(+SendMessa)-3(ge\(\))]TJ 650 | ET 651 | 0.219608 g 652 | 0.75 w 653 | [ 5.25 5.25] 0 d 654 | q 1 0 0 1 0 0 cm 655 | 72.352 82.109 m 64.543 98.059 56.016 115.48 49.723 128.34 c S Q 656 | 74.008 78.73 m 68.344 83.473 l 72.359 82.098 l 73.734 86.109 l h 657 | 74.008 78.73 m f 658 | [] 0.0 d 659 | q 1 0 0 1 0 0 cm 660 | 74.008 78.73 m 68.344 83.473 l 72.359 82.098 l 73.734 86.109 l h 661 | 74.008 78.73 m S Q 662 | [ 5.25 5.25] 0 d 663 | q 1 0 0 1 0 0 cm 664 | 113.637 82.25 m 120.566 96.211 128.047 111.281 134.078 123.422 c S Q 665 | 111.887 78.73 m 112.199 86.109 l 113.555 82.09 l 117.574 83.441 l h 666 | 111.887 78.73 m f 667 | [] 0.0 d 668 | q 1 0 0 1 0 0 cm 669 | 111.887 78.73 m 112.199 86.109 l 113.555 82.09 l 117.574 83.441 l h 670 | 111.887 78.73 m S Q 671 | q 1 0 0 1 0 0 cm 672 | 192.812 39.562 m 198.297 39.562 203.777 39.562 209.258 39.562 c S Q 673 | 182.945 39.562 m 187.445 42.562 l 191.945 39.562 l 187.445 36.562 l h 674 | 182.945 39.562 m f 675 | q 1 0 0 1 0 0 cm 676 | 182.945 39.562 m 187.445 42.562 l 191.945 39.562 l 187.445 36.562 l h 677 | 182.945 39.562 m S Q 678 | 0 g 679 | BT 680 | 9.423313 0 0 -9.75 197.340157 36.626475 Tm 681 | /f-0-0 1 Tf 682 | (1)Tj 683 | ET 684 | Q Q 685 | showpage 686 | %%Trailer 687 | end 688 | %%EOF 689 | -------------------------------------------------------------------------------- /Dokumentacja/DiagramySekwencji/DiagramySekwencji.tex: -------------------------------------------------------------------------------- 1 | \documentclass[../Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \section{Diagramy Sekwencji} 5 | \includeDiagram[width=\textwidth]{resources/GM.eps}{Diagram sekwencji GM} 6 | \includeDiagram[width=\textwidth]{resources/CS.eps}{Diagram sekwencji serwera komunikacyjnego} 7 | \includeDiagram[width=\textwidth]{resources/Agent_odmowa.eps}{Diagram sekwencji agenta - odmowa} 8 | \includeDiagram[width=\textwidth]{resources/Agent_zaakceptowany.eps}{Diagram sekwencji agenta - akceptacja} 9 | \end{document} 10 | -------------------------------------------------------------------------------- /Dokumentacja/DiagramySekwencji/resources/Agent_odmowa.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: cairo 1.15.10 (http://cairographics.org) 3 | %%CreationDate: Sun Jan 19 17:08:22 2020 4 | %%Pages: 1 5 | %%DocumentData: Clean7Bit 6 | %%LanguageLevel: 2 7 | %%BoundingBox: 0 0 339 219 8 | %%EndComments 9 | %%BeginProlog 10 | 50 dict begin 11 | /q { gsave } bind def 12 | /Q { grestore } bind def 13 | /cm { 6 array astore concat } bind def 14 | /w { setlinewidth } bind def 15 | /J { setlinecap } bind def 16 | /j { setlinejoin } bind def 17 | /M { setmiterlimit } bind def 18 | /d { setdash } bind def 19 | /m { moveto } bind def 20 | /l { lineto } bind def 21 | /c { curveto } bind def 22 | /h { closepath } bind def 23 | /re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto 24 | 0 exch rlineto 0 rlineto closepath } bind def 25 | /S { stroke } bind def 26 | /f { fill } bind def 27 | /f* { eofill } bind def 28 | /n { newpath } bind def 29 | /W { clip } bind def 30 | /W* { eoclip } bind def 31 | /BT { } bind def 32 | /ET { } bind def 33 | /BDC { mark 3 1 roll /BDC pdfmark } bind def 34 | /EMC { mark /EMC pdfmark } bind def 35 | /cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def 36 | /Tj { show currentpoint cairo_store_point } bind def 37 | /TJ { 38 | { 39 | dup 40 | type /stringtype eq 41 | { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse 42 | } forall 43 | currentpoint cairo_store_point 44 | } bind def 45 | /cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore 46 | cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def 47 | /Tf { pop /cairo_font exch def /cairo_font_matrix where 48 | { pop cairo_selectfont } if } bind def 49 | /Td { matrix translate cairo_font_matrix matrix concatmatrix dup 50 | /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point 51 | /cairo_font where { pop cairo_selectfont } if } bind def 52 | /Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def 53 | cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def 54 | /g { setgray } bind def 55 | /rg { setrgbcolor } bind def 56 | /d1 { setcachedevice } bind def 57 | /cairo_data_source { 58 | CairoDataIndex CairoData length lt 59 | { CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def } 60 | { () } ifelse 61 | } def 62 | /cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def 63 | /cairo_image { image cairo_flush_ascii85_file } def 64 | /cairo_imagemask { imagemask cairo_flush_ascii85_file } def 65 | %%EndProlog 66 | %%BeginSetup 67 | %%BeginResource: font DejaVuSans 68 | 11 dict begin 69 | /FontType 42 def 70 | /FontName /DejaVuSans def 71 | /PaintType 0 def 72 | /FontMatrix [ 1 0 0 1 0 0 ] def 73 | /FontBBox [ 0 0 0 0 ] def 74 | /Encoding 256 array def 75 | 0 1 255 { Encoding exch /.notdef put } for 76 | Encoding 32 /space put 77 | Encoding 40 /parenleft put 78 | Encoding 41 /parenright put 79 | Encoding 65 /A put 80 | Encoding 68 /D put 81 | Encoding 71 /G put 82 | Encoding 75 /K put 83 | Encoding 77 /M put 84 | Encoding 82 /R put 85 | Encoding 83 /S put 86 | Encoding 97 /a put 87 | Encoding 99 /c put 88 | Encoding 100 /d put 89 | Encoding 101 /e put 90 | Encoding 103 /g put 91 | Encoding 105 /i put 92 | Encoding 106 /j put 93 | Encoding 107 /k put 94 | Encoding 108 /l put 95 | Encoding 109 /m put 96 | Encoding 110 /n put 97 | Encoding 111 /o put 98 | Encoding 114 /r put 99 | Encoding 115 /s put 100 | Encoding 116 /t put 101 | Encoding 117 /u put 102 | Encoding 119 /w put 103 | Encoding 121 /y put 104 | Encoding 122 /z put 105 | /CharStrings 30 dict dup begin 106 | /.notdef 0 def 107 | /A 1 def 108 | /g 2 def 109 | /e 3 def 110 | /n 4 def 111 | /t 5 def 112 | /S 6 def 113 | /r 7 def 114 | /w 8 def 115 | /space 9 def 116 | /K 10 def 117 | /o 11 def 118 | /m 12 def 119 | /u 13 def 120 | /i 14 def 121 | /k 15 def 122 | /a 16 def 123 | /c 17 def 124 | /y 18 def 125 | /j 19 def 126 | /G 20 def 127 | /M 21 def 128 | /s 22 def 129 | /d 23 def 130 | /l 24 def 131 | /z 25 def 132 | /D 26 def 133 | /R 27 def 134 | /parenleft 28 def 135 | /parenright 29 def 136 | end readonly def 137 | /sfnts [ 138 | <0001000000090080000300106376742000691d3900001758000001fe6670676d7134766a0000 139 | 1958000000ab676c79663333ca380000009c000016bc686561640d1447cc00001a0400000036 140 | 686865610d9f078b00001a3c00000024686d74788ac90f1c00001a60000000786c6f63610001 141 | 63cc00001ad80000007c6d617870048b067100001b5400000020707265703b07f10000001b74 142 | 0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec 143 | 310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f272062900020010 144 | 0000056805d50002000a00c2404100110100040504021105050401110a030a0011020003030a 145 | 0711050406110505040911030a08110a030a4200030795010381090509080706040302010009 146 | 050a0b10d4c4173931002f3ce4d4ec1239304b5358071005ed0705ed071005ed0705ed071008 147 | ed071005ed071005ed071008ed5922b2200c01015d40420f010f020f070f080f005800760070 148 | 008c000907010802060309041601190256015802500c67016802780176027c03720477077808 149 | 87018802800c980299039604175d005d090121013301230321032302bcfeee0225fe7be50239 150 | d288fd5f88d5050efd1903aefa2b017ffe81000000020071fe56045a047b000b0028004a4023 151 | 190c1d0912861316b90f03b92623b827bc09b90fbd1a1d261900080c4706121220452910fcc4 152 | ecf4ec323231002fc4e4ece4f4c4ec10fed5ee1112393930b6602a802aa02a03015d01342623 153 | 220615141633323617100221222627351e013332363d010e0123220211101233321617353303 154 | a2a59594a5a59495a5b8fefefa61ac51519e52b5b439b27ccefcfcce7cb239b8023dc8dcdcc8 155 | c7dcdcebfee2fee91d1eb32c2abdbf5b6362013a01030104013a6263aa0000020071ffe3047f 156 | 047b0014001b00704024001501098608880515a90105b90c01bb18b912b80c8c1c1b15020815 157 | 08004b02120f451c10fcecf4ecc4111239310010e4f4ece410ee10ee10f4ee1112393040293f 158 | 1d701da01dd01df01d053f003f013f023f153f1b052c072f082f092c0a6f006f016f026f156f 159 | 1b095d71015d0115211e0133323637150e01232000111000333200072e0123220607047ffcb2 160 | 0ccdb76ac76263d06bfef4fec70129fce20107b802a5889ab90e025e5abec73434ae2a2c0138 161 | 010a01130143feddc497b4ae9e00000100ba00000464047b001300364019030900030e010687 162 | 0e11b80cbc0a010208004e0d09080b461410fcec32f4ec31002f3ce4f4c4ec1112173930b460 163 | 15cf1502015d0111231134262322061511231133153e013332160464b87c7c95acb9b942b375 164 | c1c602a4fd5c029e9f9ebea4fd870460ae6564ef00010037000002f2059e0013003840190e05 165 | 080f03a9001101bc08870a0b08090204000810120e461410fc3cc4fc3cc432393931002fecf4 166 | 3cc4ec3211393930b2af1501015d01112115211114163b01152322263511233533110177017b 167 | fe854b73bdbdd5a28787059efec28ffda0894e9a9fd202608f013e00000000010087ffe304a2 168 | 05f00027007e403c0d0c020e0b021e1f1e080902070a021f1f1e420a0b1e1f0415010015a114 169 | 94189511049500942591118c281e0a0b1f1b0700221b190e2d071914222810dcc4ecfcece411 170 | 1239393939310010e4f4e4ec10eef6ee10c6111739304b535807100eed11173907100eed1117 171 | 395922b20f2901015db61f292f294f29035d01152e012322061514161f011e01151404212226 172 | 27351e013332363534262f012e01353424333216044873cc5fa5b377a67ae2d7feddfee76aef 173 | 807bec72adbc879a7be2ca0117f569da05a4c53736807663651f192bd9b6d9e0302fd0454688 174 | 7e6e7c1f182dc0abc6e42600000100ba0000034a047b001100304014060b0700110b03870eb8 175 | 09bc070a06080008461210fcc4ec3231002fe4f4ecc4d4cc11123930b450139f1302015d012e 176 | 012322061511231133153e0133321617034a1f492c9ca7b9b93aba85132e1c03b41211cbbefd 177 | b20460ae66630505000000010056000006350460000c01eb404905550605090a0904550a0903 178 | 550a0b0a025501020b0b0a061107080705110405080807021103020c000c011100000c420a05 179 | 0203060300bf0b080c0b0a09080605040302010b07000d10d44bb00a544bb011545b4bb01254 180 | 5b4bb013545b4bb00b545b58b9000000403859014bb00c544bb00d545b4bb010545b58b90000 181 | ffc03859cc173931002f3cec32321739304b5358071005ed071008ed071008ed071005ed0710 182 | 08ed071005ed0705ed071008ed59220140ff050216021605220a350a49024905460a400a5b02 183 | 5b05550a500a6e026e05660a79027f0279057f05870299029805940abc02bc05ce02c703cf05 184 | 1d0502090306040b050a080b09040b050c1502190316041a051b081b09140b150c2500250123 185 | 022703210425052206220725082709240a210b230c390336043608390c300e46024803460440 186 | 0442054006400740084409440a440b400e400e56005601560250045105520652075008530954 187 | 0a550b6300640165026a0365046a056a066a076e09610b670c6f0e7500750179027d0378047d 188 | 057a067f067a077f07780879097f097b0a760b7d0c870288058f0e97009701940293039c049b 189 | 05980698079908402f960c9f0ea600a601a402a403ab04ab05a906a907ab08a40caf0eb502b1 190 | 03bd04bb05b809bf0ec402c303cc04ca05795d005d13331b01331b013301230b012356b8e6e5 191 | d9e6e5b8fedbd9f1f2d90460fc96036afc96036afba00396fc6a000100c90000056a05d5000a 192 | 00ef4028081105060507110606050311040504021105050442080502030300af090605010406 193 | 08011c00040b10fcec32d4c4113931002f3cec321739304b5358071004ed071005ed071005ed 194 | 071004ed5922b2080301015d4092140201040209081602280528083702360534084702460543 195 | 085502670276027705830288058f0894029b08e702150603090509061b031907050a030a0718 196 | 0328052b062a073604360536063507300c41034004450540064007400c620360046805670777 197 | 05700c8b038b058e068f078f0c9a039d069d07b603b507c503c507d703d607e803e904e805ea 198 | 06f703f805f9062c5d71005d711333110121090121011123c9ca029e0104fd1b031afef6fd33 199 | ca05d5fd890277fd48fce302cffd3100000000020071ffe30475047b000b0017004a401306b9 200 | 1200b90cb8128c1809120f51031215451810fcecf4ec310010e4f4ec10ee3040233f197b007b 201 | 067f077f087f097f0a7f0b7b0c7f0d7f0e7f0f7f107f117b12a019f01911015d012206151416 202 | 333236353426273200111000232200111000027394acab9593acac93f00112feeef0f1feef01 203 | 1103dfe7c9c9e7e8c8c7e99cfec8feecfeedfec701390113011401380000000100ba0000071d 204 | 047b0022005a4026061209180f00061d07150c871d2003b81bbc19100700110f080806501108 205 | 0f501c18081a462310fcec32fcfcfcec11123931002f3c3ce4f43cc4ec321112173930401330 206 | 24502470249024a024a024bf24df24ff2409015d013e01333216151123113426232206151123 207 | 1134262322061511231133153e01333216042945c082afbeb972758fa6b972778da6b9b93fb0 208 | 797aab03897c76f5e2fd5c029ea19cbea4fd87029ea29bbfa3fd870460ae67627c0000000002 209 | 00aeffe30458047b00130014003b401c030900030e0106870e118c0a01bc14b80c0d0908140b 210 | 4e020800461510fcecf439ec3231002fe4e432f4c4ec1112173930b46f15c01502015d131133 211 | 1114163332363511331123350e0123222601aeb87c7c95adb8b843b175c1c801cf01ba02a6fd 212 | 619f9fbea4027bfba0ac6663f003a800000200c100000179061400030007002b400e06be04b1 213 | 00bc020501080400460810fc3cec3231002fe4fcec30400b1009400950096009700905015d13 214 | 33112311331523c1b8b8b8b80460fba00614e900000100ba0000049c0614000a00bc40290811 215 | 050605071106060503110405040211050504420805020303bc00970906050104060801080046 216 | 0b10fcec32d4c4113931002f3cece41739304b5358071004ed071005ed071005ed071004ed59 217 | 22b2100c01015d405f04020a081602270229052b0856026602670873027705820289058e0893 218 | 0296059708a3021209050906020b030a072803270428052b062b07400c6803600c8903850489 219 | 058d068f079a039707aa03a705b607c507d607f703f003f704f0041a5d71005d133311013309 220 | 0123011123bab90225ebfdae026bf0fdc7b90614fc6901e3fdf4fdac0223fddd0002007bffe3 221 | 042d047b000a002500bc4027191f0b17090e00a91706b90e1120861fba1cb923b8118c170c00 222 | 1703180d09080b1f030814452610fcecccd4ec323211393931002fc4e4f4fcf4ec10c6ee10ee 223 | 11391139123930406e301d301e301f3020302130223f27401d401e401f402040214022501d50 224 | 1e501f50205021502250277027851d871e871f8720872185229027a027f0271e301e301f3020 225 | 3021401e401f40204021501e501f50205021601e601f60206021701e701f70207021801e801f 226 | 80208021185d015d0122061514163332363d01371123350e0123222635343633213534262322 227 | 0607353e0133321602bedfac816f99b9b8b83fbc88accbfdfb0102a79760b65465be5af3f002 228 | 33667b6273d9b4294cfd81aa6661c1a2bdc0127f8b2e2eaa2727fc0000010071ffe303e7047b 229 | 0019003f401b00860188040e860d880ab91104b917b8118c1a07120d004814451a10fce432ec 230 | 310010e4f4ec10fef4ee10f5ee30400b0f1b101b801b901ba01b05015d01152e012322061514 231 | 1633323637150e0123220011100021321603e74e9d50b3c6c6b3509d4e4da55dfdfed6012d01 232 | 0655a20435ac2b2be3cdcde32b2baa2424013e010e0112013a2300000001003dfe56047f0460 233 | 000f018b40430708020911000f0a110b0a00000f0e110f000f0d110c0d00000f0d110e0d0a0b 234 | 0a0c110b0b0a420d0b0910000b058703bd0e0bbc100e0d0c0a09060300080f040f0b1010d44b 235 | b00a544bb008545b58b9000b004038594bb0145458b9000bffc03859c4c4111739310010e432 236 | f4ec113911391239304b5358071005ed071008ed071008ed071005ed071008ed0705ed173259 237 | 220140f0060005080609030d160a170d100d230d350d490a4f0a4e0d5a095a0a6a0a870d800d 238 | 930d120a000a09060b050c0b0e0b0f1701150210041005170a140b140c1a0e1a0f2700240124 239 | 022004200529082809250a240b240c270d2a0e2a0f201137003501350230043005380a360b36 240 | 0c380d390e390f30114100400140024003400440054006400740084209450a470d490e490f40 241 | 115400510151025503500450055606550756085709570a550b550c590e590f50116601660268 242 | 0a690e690f60117b08780e780f89008a09850b850c890d890e890f9909950b950c9a0e9a0fa4 243 | 0ba40cab0eab0fb011cf11df11ff11655d005d050e012b01353332363f01013309013302934e 244 | 947c936c4c543321fe3bc3015e015ec368c87a9a488654044efc94036c0000000002ffdbfe56 245 | 01790614000b000f0044401c0b0207000ebe0c078705bd00bc0cb110081005064f0d01080c00 246 | 461010fc3cec32e4391239310010ece4f4ec10ee1112393930400b1011401150116011701105 247 | 015d13331114062b01353332363511331523c1b8a3b54631694cb8b80460fb8cd6c09c619906 248 | 28e9000000010073ffe3058b05f0001d0039402000051b0195031b950812a111ae15950e9108 249 | 8c1e02001c1134043318190b101e10fcecfce4fcc4310010e4f4ecf4ec10fed4ee1139393025 250 | 1121352111060423200011100021320417152e0123200011100021323604c3feb6021275fee6 251 | a0fea2fe75018b015e9201076f70fc8bfeeefeed011301126ba8d50191a6fd7f53550199016d 252 | 016e01994846d75f60fecefed1fed2fece250000000100c90000061f05d5000c00bf40340311 253 | 0708070211010208080702110302090a0901110a0a09420a070203080300af080b0509080302 254 | 01050a061c043e0a1c00040d10fcecfcec11173931002f3cc4ec32111739304b5358071005ed 255 | 071008ed071008ed071005ed5922b2700e01015d405603070f080f09020a15021407130a2602 256 | 26072007260a200a3407350a69027c027b07790a80028207820a90021604010b0313011b0323 257 | 012c032708280934013c035608590965086a097608790981018d0395019b03145d005d132109 258 | 01211123110123011123c9012d017d017f012dc5fe7fcbfe7fc405d5fc0803f8fa2b051ffc00 259 | 0400fae100000001006fffe303c7047b002700e7403c0d0c020e0b531f1e080902070a531f1f 260 | 1e420a0b1e1f041500860189041486158918b91104b925b8118c281e0a0b1f1b0700521b080e 261 | 07081422452810fcc4ecd4ece4111239393939310010e4f4ec10fef5ee10f5ee121739304b53 262 | 5807100eed111739070eed1117395922b2002701015d406d1c0a1c0b1c0c2e092c0a2c0b2c0c 263 | 3b093b0a3b0b3b0c0b200020012402280a280b2a132f142f152a16281e281f29202921242786 264 | 0a860b860c860d12000000010202060a060b030c030d030e030f03100319031a031b031c041d 265 | 09272f293f295f297f2980299029a029f029185d005d7101152e012322061514161f011e0115 266 | 140623222627351e013332363534262f012e01353436333216038b4ea85a898962943fc4a5f7 267 | d85ac36c66c661828c65ab40ab98e0ce66b4043fae282854544049210e2a99899cb62323be35 268 | 3559514b50250f2495829eac1e00000000020071ffe3045a06140010001c003840191ab9000e 269 | 14b905088c0eb801970317040008024711120b451d10fcecf4ec323231002fece4f4c4ec10c4 270 | ee30b6601e801ea01e03015d0111331123350e01232202111000333216011416333236353426 271 | 23220603a2b8b83ab17ccbff00ffcb7cb1fdc7a79292a8a89292a703b6025ef9eca864610144 272 | 01080108014461fe15cbe7e7cbcbe7e7000100c100000179061400030022b700970201080046 273 | 0410fcec31002fec30400d10054005500560057005f00506015d13331123c1b8b80614f9ec00 274 | 00010058000003db04600009009d401a081102030203110708074208a900bc03a90508030100 275 | 0401060a10dc4bb00b544bb00c545b58b90006ffc038594bb0135458b9000600403859c432c4 276 | 11393931002fecf4ec304b5358071005ed071005ed592201404205021602260247024907050b 277 | 080f0b18031b082b08200b36033908300b400140024503400440054308570359085f0b600160 278 | 0266036004600562087f0b800baf0b1b5d005d1321150121152135012171036afd4c02b4fc7d 279 | 02b4fd650460a8fcdb93a8032500000200c9000005b005d500080011002e4015009509810195 280 | 100802100a0005190d32001c09041210fcecf4ec113939393931002fecf4ec30b2601301015d 281 | 0111332000111000212521200011100029010193f40135011ffee1fecbfe42019f01b20196fe 282 | 68fe50fe61052ffb770118012e012c0117a6fe97fe80fe7efe960000000200c90000055405d5 283 | 0013001c00b14035090807030a061103040305110404034206040015030415950914950d810b 284 | 040506031109001c160e050a191904113f140a1c0c041d10fcec32fcc4ec1117391139393931 285 | 002f3cf4ecd4ec123912391239304b5358071005ed071005ed1117395922b2401e01015d4042 286 | 7a13010500050105020603070415001501140216031704250025012502260327062607260826 287 | 09201e3601360246014602680575047505771388068807980698071f5d005d011e0117132303 288 | 2e012b01112311212016151406011133323635342623038d417b3ecdd9bf4a8b78dcca01c801 289 | 00fc83fd89fe9295959202bc16907efe68017f9662fd8905d5d6d88dba024ffdee8783838500 290 | 000100b0fef2027b0612000d0037400f069800970e0d070003120600130a0e10dc4bb0135458 291 | b9000affc038594bb00f5458b9000a00403859e432ec113939310010fcec3001060215141217 292 | 23260235341237027b86828385a0969594970612e6fe3ee7e7fe3be5eb01c6e0df01c4ec0001 293 | 00a4fef2026f0612000d001f400f079800970e0701000b12041308000e10dc3cf4ec11393931 294 | 0010fcec301333161215140207233612353402a4a096959596a08583830612ecfe3cdfe0fe3a 295 | ebe501c5e7e701c20000013500b800cb00cb00c100aa009c01a600b800660000007100cb00a0 296 | 02b20085007500b800c301cb0189022d00cb00a600f000d300aa008700cb03aa0400014a0033 297 | 00cb000000d9050200f4015400b4009c01390114013907060400044e04b4045204b804e704cd 298 | 0037047304cd04600473013303a2055605a60556053903c5021200c9001f00b801df007300ba 299 | 03e9033303bc0444040e00df03cd03aa00e503aa0404000000cb008f00a4007b00b80014016f 300 | 007f027b0252008f00c705cd009a009a006f00cb00cd019e01d300f000ba018300d500980304 301 | 0248009e01d500c100cb00f600830354027f00000333026600d300c700a400cd008f009a0073 302 | 040005d5010a00fe022b00a400b4009c00000062009c0000001d032d05d505d505d505f0007f 303 | 007b005400a406b80614072301d300b800cb00a601c301ec069300a000d3035c037103db0185 304 | 042304a80448008f0139011401390360008f05d5019a0614072306660179046004600460047b 305 | 009c00000277046001aa00e904600762007b00c5007f027b000000b4025205cd006600bc0066 306 | 0077061000cd013b01850389008f007b0000001d00cd074a042f009c009c0000077d006f0000 307 | 006f0335006a006f007b00ae00b2002d0396008f027b00f600830354063705f6008f009c04e1 308 | 0266008f018d02f600cd03440029006604ee00730000140000960000b707060504030201002c 309 | 2010b002254964b040515820c859212d2cb002254964b040515820c859212d2c20100720b000 310 | 50b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920b8ffff50 311 | 58041b0559b0051cb0032508e12d2c4b505820b0fd454459212d2cb002254560442d2c4b5358 312 | b00225b0022545445921212d2c45442d2cb00225b0022549b00525b005254960b0206368208a 313 | 108a233a8a10653a2d000001000000025eb8e90cbcdc5f0f3cf5001f080000000000d3d94ef7 314 | 00000000d3d94ef7f7d6fc4c0e5909dc00000008000000010000000000010000076dfe1d0000 315 | 0efef7d6fa510e5900010000000000000000000000000000001e04cd00660579001005140071 316 | 04ec0071051200ba0323003705140087034a00ba068b0056028b0000053f00c904e5007107cb 317 | 00ba051200ae023900c104a200ba04e7007b0466007104bc003d0239ffdb0633007306e700c9 318 | 042b006f05140071023900c104330058062900c9058f00c9031f00b0031f00a4000000000000 319 | 00440000014000000208000002dc00000354000003d0000004c8000005380000075c0000075c 320 | 0000088400000928000009ec00000a7000000ac000000bb000000cdc00000d7400000f400000 321 | 0fbc0000106400001160000012c0000013580000139400001460000014e0000015f400001664 322 | 000016bc00010000001e0354002b0068000c000200100099000800000415021600080004b802 323 | 8040fffbfe03fa1403f92503f83203f79603f60e03f5fe03f4fe03f32503f20e03f19603f025 324 | 03ef8a4105effe03ee9603ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5e453 325 | 05e59603e48a4105e45303e3e22f05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603dcfe 326 | 03db1203da7d03d9bb03d8fe03d68a4105d67d03d5d44705d57d03d44703d3d21b05d3fe03d2 327 | 1b03d1fe03d0fe03cffe03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c6851105c6 328 | 1c03c51603c4fe03c3fe03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba1103 329 | b9862505b9fe03b8b7bb05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff03b64004b525 330 | 03b4fe03b39603b2fe03b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403abaa1205ab25 331 | 03aa1203a98a4105a9fa03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03a164 332 | 03a08a4105a096039ffe039e9d0c059efe039d0c039c9b19059c64039b9a10059b19039a1003 333 | 990a0398fe0397960d0597fe03960d03958a410595960394930e05942803930e0392fa039190 334 | bb0591fe03908f5d0590bb039080048f8e25058f5d038f40048e25038dfe038c8b2e058cfe03 335 | 8b2e038a8625058a410389880b05891403880b03878625058764038685110586250385110384 336 | fe038382110583fe0382110381fe0380fe037ffe0340ff7e7d7d057efe037d7d037c64037b54 337 | 15057b25037afe0379fe03780e03770c03760a0375fe0374fa0373fa0372fa0371fa0370fe03 338 | 6ffe036efe036c21036bfe036a1142056a530369fe03687d036711420566fe0365fe0364fe03 339 | 63fe0362fe03613a0360fa035e0c035dfe035bfe035afe0359580a0559fa03580a0357161905 340 | 57320356fe035554150555420354150353011005531803521403514a130551fe03500b034ffe 341 | 034e4d10054efe034d10034cfe034b4a13054bfe034a4910054a1303491d0d05491003480d03 342 | 47fe0346960345960344fe0343022d0543fa0342bb03414b0340fe033ffe033e3d12053e1403 343 | 3d3c0f053d12033c3b0d053c40ff0f033b0d033afe0339fe033837140538fa03373610053714 344 | 0336350b05361003350b03341e03330d0332310b0532fe03310b03302f0b05300d032f0b032e 345 | 2d09052e10032d09032c32032b2a25052b64032a2912052a2503291203282725052841032725 346 | 0326250b05260f03250b0324fe0323fe03220f03210110052112032064031ffa031e1d0d051e 347 | 64031d0d031c1142051cfe031bfa031a42031911420519fe031864031716190517fe03160110 348 | 0516190315fe0314fe0313fe031211420512fe0311022d05114203107d030f64030efe030d0c 349 | 16050dfe030c0110050c16030bfe030a100309fe0308022d0508fe0307140306640304011005 350 | 04fe03401503022d0503fe0302011005022d0301100300fe0301b80164858d012b2b2b2b2b2b 351 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 352 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 353 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 354 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 355 | 2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 356 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 357 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 358 | 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 359 | 2b2b2b2b2b2b2b2b2b2b2b2b2b1d00> 360 | ] def 361 | /f-0-0 currentdict end definefont pop 362 | %%EndResource 363 | %%EndSetup 364 | %%Page: 1 1 365 | %%BeginPageSetup 366 | %%PageBoundingBox: 0 0 339 219 367 | %%EndPageSetup 368 | q 0 0 339 219 rectclip 369 | 1 0 0 -1 0 219 cm q 370 | 1 g 371 | 13.793 66.223 7.5 81.398 re f 372 | 0.219608 g 373 | 0.75 w 374 | 0 J 375 | 0 j 376 | [] 0.0 d 377 | 4 M q 1 0 0 1 0 0 cm 378 | 13.793 66.223 7.5 81.398 re S Q 379 | 1 g 380 | 139.793 82.074 7.5 65.547 re f 381 | 0.219608 g 382 | q 1 0 0 1 0 0 cm 383 | 139.793 82.074 7.5 65.547 re S Q 384 | 1 g 385 | 294.293 103.922 7.5 21.848 re f 386 | 0.219608 g 387 | q 1 0 0 1 0 0 cm 388 | 294.293 103.922 7.5 21.848 re S Q 389 | [ 3.75 3.75] 0 d 390 | q 1 0 0 1 0 0 cm 391 | 17.168 58.723 m 17.168 161.121 l S Q 392 | [ 3.75 3.75] 0 d 393 | q 1 0 0 1 0 0 cm 394 | 143.543 58.723 m 143.543 161.121 l S Q 395 | [ 3.75 3.75] 0 d 396 | q 1 0 0 1 0 0 cm 397 | 298.043 58.723 m 298.043 161.121 l S Q 398 | 0 g 399 | BT 400 | 10.385224 0 0 -10.499999 -0.0811346 56.246326 Tm 401 | /f-0-0 1 Tf 402 | (Agent)Tj 403 | ET 404 | 0.972549 g 405 | 23.543 6.75 m 23.543 10.062 20.859 12.75 17.543 12.75 c 14.23 12.75 11.543 406 | 10.062 11.543 6.75 c 11.543 3.438 14.23 0.75 17.543 0.75 c 20.859 0.75 407 | 23.543 3.438 23.543 6.75 c h 408 | 23.543 6.75 m f 409 | 0.219608 g 410 | 1.5 w 411 | [] 0.0 d 412 | q 1 0 0 1 0 0 cm 413 | 23.543 6.75 m 23.543 10.062 20.859 12.75 17.543 12.75 c 14.23 12.75 11.543 414 | 10.062 11.543 6.75 c 11.543 3.438 14.23 0.75 17.543 0.75 c 20.859 0.75 415 | 23.543 3.438 23.543 6.75 c h 416 | 23.543 6.75 m S Q 417 | q 1 0 0 1 0 0 cm 418 | 17.543 12.75 m 17.543 33 l 7.793 18.75 m 27.293 18.75 l 17.543 33 m 7.793 419 | 44.25 l 17.543 33 m 27.293 44.25 l S Q 420 | 0 g 421 | BT 422 | 10.385224 0 0 -10.499999 -0.0811346 170.117397 Tm 423 | /f-0-0 1 Tf 424 | (Agent)Tj 425 | ET 426 | 0.972549 g 427 | 23.543 180.094 m 23.543 183.406 20.859 186.094 17.543 186.094 c 14.23 186.094 428 | 11.543 183.406 11.543 180.094 c 11.543 176.781 14.23 174.094 17.543 174.094 429 | c 20.859 174.094 23.543 176.781 23.543 180.094 c h 430 | 23.543 180.094 m f 431 | 0.219608 g 432 | q 1 0 0 1 0 0 cm 433 | 23.543 180.094 m 23.543 183.406 20.859 186.094 17.543 186.094 c 14.23 186.094 434 | 11.543 183.406 11.543 180.094 c 11.543 176.781 14.23 174.094 17.543 174.094 435 | c 20.859 174.094 23.543 176.781 23.543 180.094 c h 436 | 23.543 180.094 m S Q 437 | q 1 0 0 1 0 0 cm 438 | 17.543 186.094 m 17.543 206.344 l 7.793 192.094 m 27.293 192.094 l 17.543 439 | 206.344 m 7.793 217.594 l 17.543 206.344 m 27.293 217.594 l S Q 440 | 0.972549 g 441 | 80.543 35.25 126 22.723 re f 442 | 0.219608 g 443 | 1.125 w 444 | q 1 0 0 1 0 0 cm 445 | 80.543 35.25 126 22.723 re S Q 446 | 0 g 447 | BT 448 | 10.141657 0 0 -10.5 85.793865 50.246326 Tm 449 | /f-0-0 1 Tf 450 | [(Serwer )-3(K)48(omunik)16(acyjny)]TJ 451 | ET 452 | 0.972549 g 453 | 80.543 160.371 126 22.723 re f 454 | 0.219608 g 455 | q 1 0 0 1 0 0 cm 456 | 80.543 160.371 126 22.723 re S Q 457 | 0 g 458 | BT 459 | 10.141657 0 0 -10.5 85.793865 175.367397 Tm 460 | /f-0-0 1 Tf 461 | [(Serwer )-3(K)48(omunik)16(acyjny)]TJ 462 | ET 463 | 0.972549 g 464 | 258.293 35.25 79.5 22.723 re f 465 | 0.219608 g 466 | q 1 0 0 1 0 0 cm 467 | 258.293 35.25 79.5 22.723 re S Q 468 | 0 g 469 | BT 470 | 10.275742 0 0 -10.499999 263.543865 50.246326 Tm 471 | /f-0-0 1 Tf 472 | [(Game Ma)-3(ster)]TJ 473 | ET 474 | 0.972549 g 475 | 258.293 160.371 79.5 22.723 re f 476 | 0.219608 g 477 | q 1 0 0 1 0 0 cm 478 | 258.293 160.371 79.5 22.723 re S Q 479 | 0 g 480 | BT 481 | 10.275742 0 0 -10.499999 263.543865 175.367397 Tm 482 | /f-0-0 1 Tf 483 | [(Game Ma)-3(ster)]TJ 484 | ET 485 | 1 g 486 | 13.793 66.223 7.5 81.398 re f 487 | 0.219608 g 488 | 0.75 w 489 | q 1 0 0 1 0 0 cm 490 | 13.793 66.223 7.5 81.398 re S Q 491 | 1 g 492 | 139.793 82.074 7.5 65.547 re f 493 | 0.219608 g 494 | q 1 0 0 1 0 0 cm 495 | 139.793 82.074 7.5 65.547 re S Q 496 | 1 g 497 | 294.293 103.922 7.5 21.848 re f 498 | 0.219608 g 499 | q 1 0 0 1 0 0 cm 500 | 294.293 103.922 7.5 21.848 re S Q 501 | 130.793 79.074 m 138.293 82.074 l 130.793 85.074 l 133.793 82.074 l h 502 | 130.793 79.074 m f 503 | q 1 0 0 1 0 0 cm 504 | 130.793 79.074 m 138.293 82.074 l 130.793 85.074 l 133.793 82.074 l h 505 | 130.793 79.074 m S Q 506 | q 1 0 0 1 0 0 cm 507 | 21.293 82.074 m 135.293 82.074 l S Q 508 | 0 g 509 | BT 510 | 9.378076 0 0 -9.750001 26.543865 78.27285 Tm 511 | /f-0-0 1 Tf 512 | [(dolaczDoR)44(ozgrywki\(\))]TJ 513 | ET 514 | 292.793 103.922 m 285.293 100.922 l f 515 | 0.219608 g 516 | q 1 0 0 1 0 0 cm 517 | 292.793 103.922 m 285.293 100.922 l S Q 518 | 0 g 519 | 292.793 103.922 m 285.293 106.922 l f 520 | 0.219608 g 521 | q 1 0 0 1 0 0 cm 522 | 292.793 103.922 m 285.293 106.922 l S Q 523 | q 1 0 0 1 0 0 cm 524 | 147.293 103.922 m 293.543 103.922 l S Q 525 | 0 g 526 | BT 527 | 9.447873 0 0 -9.75 152.543865 100.122448 Tm 528 | /f-0-0 1 Tf 529 | [(dolaczAgentaDoR)43(ozgrywki\(\))]TJ 530 | ET 531 | 147.293 125.77 m 154.793 122.77 l f 532 | 0.219608 g 533 | q 1 0 0 1 0 0 cm 534 | 147.293 125.77 m 154.793 122.77 l S Q 535 | 0 g 536 | 147.293 125.77 m 154.793 128.77 l f 537 | 0.219608 g 538 | q 1 0 0 1 0 0 cm 539 | 147.293 125.77 m 154.793 128.77 l S Q 540 | [ 1.5 1.5] 0 d 541 | q 1 0 0 1 0 0 cm 542 | 147.293 125.77 m 297.293 125.77 l S Q 543 | 0 g 544 | BT 545 | 9.541257 0 0 -9.749999 160.043865 121.972046 Tm 546 | /f-0-0 1 Tf 547 | [(odmowaDolaczenia\(\))]TJ 548 | ET 549 | 17.543 147.621 m 25.043 144.621 l f 550 | 0.219608 g 551 | [] 0.0 d 552 | q 1 0 0 1 0 0 cm 553 | 17.543 147.621 m 25.043 144.621 l S Q 554 | 0 g 555 | 17.543 147.621 m 25.043 150.621 l f 556 | 0.219608 g 557 | q 1 0 0 1 0 0 cm 558 | 17.543 147.621 m 25.043 150.621 l S Q 559 | [ 1.5 1.5] 0 d 560 | q 1 0 0 1 0 0 cm 561 | 17.543 147.621 m 142.793 147.621 l S Q 562 | 0 g 563 | BT 564 | 9.541257 0 0 -9.749999 30.293865 143.821655 Tm 565 | /f-0-0 1 Tf 566 | [(odmowaDolaczenia\(\))]TJ 567 | ET 568 | Q Q 569 | showpage 570 | %%Trailer 571 | end 572 | %%EOF 573 | -------------------------------------------------------------------------------- /Dokumentacja/DiagramyStanow/DiagramyStanow.tex: -------------------------------------------------------------------------------- 1 | \documentclass[../Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \section{Diagramy Stanów} 5 | \subsection{GM} 6 | \includeDiagram[width=\textwidth]{resources/GM.eps}{Diagram stanów Game Mastera} 7 | \subsection{Agent} 8 | \includeDiagramFullPage[width=\textwidth]{resources/AgentStates.pdf}{Diagram stanów Agenta} 9 | \subsection{Kawałek} 10 | Stan kawałka może zmieniać jedynie Agent akcjami przez niego wykonywalnymi. Kawałki są usuwane (\textit{jako obiekty}) tylko na 11 | zakończenie rozgrywki oraz na akcję zniszczenia. Odłożony kawałek nie zawsze może zostać podniesiony. O tym czy dany kawałek może 12 | zostać podniesiony decyduje typ pola na który został odłożony. 13 | \includeDiagram[width=\textwidth]{resources/Piece.pdf}{Diagram stanów kawałka} 14 | \subsection{Pole bramkowe} 15 | Pole bramkowe rozpoczyna jako puste. Zgodnie z regułami raz odłożony fragment na pole bramkowe nie może zostać już podniesiony. Zatem 16 | po położeniu na pole bramkowe fragmentu, już nigdy nie przejdzie ono do stanu pustego. GM nie może wygenerować fragmentu na polu bramkowym. 17 | \includeDiagramFullPage[width=\textwidth]{resources/Goal.pdf}{Diagram stanów pola w polu bramkowym} 18 | \end{document} 19 | -------------------------------------------------------------------------------- /Dokumentacja/DiagramyStanow/resources/AgentStates.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MINI-IO/IO-project-game/8b4c8f2b0f00cdc301e24b2930d01685fbd72b0e/Dokumentacja/DiagramyStanow/resources/AgentStates.pdf -------------------------------------------------------------------------------- /Dokumentacja/DiagramyStanow/resources/Goal.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: cairo 1.15.10 (http://cairographics.org) 3 | %%CreationDate: Sun Jan 19 20:29:34 2020 4 | %%Pages: 1 5 | %%DocumentData: Clean7Bit 6 | %%LanguageLevel: 2 7 | %%BoundingBox: 0 0 341 466 8 | %%EndComments 9 | %%BeginProlog 10 | 50 dict begin 11 | /q { gsave } bind def 12 | /Q { grestore } bind def 13 | /cm { 6 array astore concat } bind def 14 | /w { setlinewidth } bind def 15 | /J { setlinecap } bind def 16 | /j { setlinejoin } bind def 17 | /M { setmiterlimit } bind def 18 | /d { setdash } bind def 19 | /m { moveto } bind def 20 | /l { lineto } bind def 21 | /c { curveto } bind def 22 | /h { closepath } bind def 23 | /re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto 24 | 0 exch rlineto 0 rlineto closepath } bind def 25 | /S { stroke } bind def 26 | /f { fill } bind def 27 | /f* { eofill } bind def 28 | /n { newpath } bind def 29 | /W { clip } bind def 30 | /W* { eoclip } bind def 31 | /BT { } bind def 32 | /ET { } bind def 33 | /BDC { mark 3 1 roll /BDC pdfmark } bind def 34 | /EMC { mark /EMC pdfmark } bind def 35 | /cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def 36 | /Tj { show currentpoint cairo_store_point } bind def 37 | /TJ { 38 | { 39 | dup 40 | type /stringtype eq 41 | { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse 42 | } forall 43 | currentpoint cairo_store_point 44 | } bind def 45 | /cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore 46 | cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def 47 | /Tf { pop /cairo_font exch def /cairo_font_matrix where 48 | { pop cairo_selectfont } if } bind def 49 | /Td { matrix translate cairo_font_matrix matrix concatmatrix dup 50 | /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point 51 | /cairo_font where { pop cairo_selectfont } if } bind def 52 | /Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def 53 | cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def 54 | /g { setgray } bind def 55 | /rg { setrgbcolor } bind def 56 | /d1 { setcachedevice } bind def 57 | /cairo_data_source { 58 | CairoDataIndex CairoData length lt 59 | { CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def } 60 | { () } ifelse 61 | } def 62 | /cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def 63 | /cairo_image { image cairo_flush_ascii85_file } def 64 | /cairo_imagemask { imagemask cairo_flush_ascii85_file } def 65 | %%EndProlog 66 | %%BeginSetup 67 | %%BeginResource: font f-0-0 68 | %!FontType1-1.1 f-0-0 1.0 69 | 11 dict begin 70 | /FontName /f-0-0 def 71 | /PaintType 0 def 72 | /FontType 1 def 73 | /FontMatrix [0.001 0 0 0.001 0 0] readonly def 74 | /FontBBox {-18 -218 929 732 } readonly def 75 | /Encoding 256 array 76 | 0 1 255 {1 index exch /.notdef put} for 77 | dup 32 /space put 78 | dup 46 /period put 79 | dup 65 /A put 80 | dup 77 /M put 81 | dup 80 /P put 82 | dup 87 /W put 83 | dup 90 /Z put 84 | dup 97 /a put 85 | dup 99 /c put 86 | dup 101 /e put 87 | dup 102 /f put 88 | dup 103 /g put 89 | dup 105 /i put 90 | dup 106 /j put 91 | dup 107 /k put 92 | dup 109 /m put 93 | dup 110 /n put 94 | dup 111 /o put 95 | dup 114 /r put 96 | dup 115 /s put 97 | dup 116 /t put 98 | dup 117 /u put 99 | dup 119 /w put 100 | dup 121 /y put 101 | dup 122 /z put 102 | readonly def 103 | currentdict end 104 | currentfile eexec 105 | f983ef0097ece636fb4a96c74d26ab84185f6dfa4a16a7a1c27bbe3f1156aea698df336d20b467 106 | b10e7f33846656653c5ac6962759d3056cbdb3190bac614b984bf5a132dc418192443014ba63de 107 | 800d392b6fea026574bb2535fd7bb5338f35bf15a88ea328fdaa49670c7852e3d060f3c5d6b07f 108 | 2ef6d0f22646c5d18e19a2ae3ee120390f6dd96f76dcf1e127de5e9299077a00c17c0d71e36e5b 109 | 9d5ec58fceda57739a6a4214d4b79d6c48d2784b60c320323c7acddddf34db833cac0cf109f799 110 | 69d114a330d372e5c978a66acc84e3fe5557f6240856a013ffaa0199444e5c5036f775eba4a5c5 111 | 8cde66cf604b9aca2178431127b8a1ff7ed633a65c04600af5f573483112251caf36d87fcbcc51 112 | 7cdc80a7fdf8e3c5ced0c3bfb6f2429abb36ea69768ca4bd9f1c63b57e0a2ec0c8d64df6b8a9a9 113 | abf29730ab7983cdaf770e42d324e8cad2d3464792ea481530613bae728299e6d2a000e99acf1e 114 | e1d0551205d61b0de26072ee6d9a363d4aef5f1ede3334b1ded9168e004bc07bcd53a1c8f4b49e 115 | 85ab9c1cc7a9478fb8a88bde18f5c1aad209e48a0fb439e9ef6240219431bdf6d811e7d35dd026 116 | 58f7ee752f57a3c6d507fa3b6c7364a2cfef79eef8a04c45fb49e816cf52511d9423806eb6505c 117 | 6b0ddc97279a7700ab6edef6433ea01a9edb91997e20bfcdd7f0d2f463e8b86829b0ef25eda281 118 | e7eb98990c42b35a37c8dce2bdd927c8687e8e2e296d7ca0dadbf63e9599a7cf688fbbd742c4af 119 | 58ab874ca91249d4e1db25a7f8142bc457948566baec0db4fe2e3a375067b6980e08c347978433 120 | 5dfad916d632503409204536065dbcc9efd7a223ee144202c5c283900c4dd933a41a9836146c4f 121 | 63a1bd6f229d7dbc0c4faa457ad1df3d15f601e444b3afb3dbddb625184d77d17eaa35bd7d579e 122 | 9cde56b3d8672f0689269fb78d92982163d88834b06b5b1e0c0151d9b2cda84ea32f18f473c0de 123 | 678f6be1d8125b35e2acf7ed95070f11f798506a135f7faba98f0b990b9ce25883382c18d059e6 124 | 60341cfb53a99387c5ad9c653cf35d78cc85eb3fb05ce9c6bfb2c08eaeba79db62ab1a0c1fbf1f 125 | 6c230c1c4302b748aa1fbf3495946c74f999b8f359b5051444802c6a5d5b0d0c6d5049a596cfe6 126 | 9f7185c6fbe1243e4c94d9473bcc77d8d9e1264d366e2ab72349856ba936f5991e26facc0ac5e3 127 | d283277d1e25c98e92979341724696f8b14780c1af0615188dde4b2642cab2815025c4104124e0 128 | a23716da6123a042ed3fea0d87ff3e72583abd311bf3fb69d367b61362c7218822a0e98a6add17 129 | 5881a94cd433d12a603bcc4b9577a391f5a06e74f8dd63e38b4132fc226fac5fb4c1a0b78feea5 130 | 905ae1f2998ea33705fd7162ae3bea5fee7a0eea826a298774437515478075a12ee859ce39591d 131 | 6b340ff110066e002f25bbe925051fabb04a1a6fe439226e2c0641c8c55b3342f5804346c12641 132 | afd9d3e156ef6f13b6fd55954d0b7eda71357c887bda5dd017a75476d488cf6e6f0c6f3ef7d4f9 133 | 8bfa37fdc63b283cd544a6064c77a839e15e5546aaa19d7b8b7c9aded8dbce35ee2148a4200d64 134 | 75d1da49d9841b3181e3c74ca79402d4ccaee3bf9579c99370dd488721decf9ab1c6abbb42688a 135 | 44a1eec543258f0f13d871ffa4057b95011f9aca1d34595148140fae194b89842f5257fde1ac7c 136 | a4d38aa1f663cafc998a7cb50f378b56284fd9ce9aaba5f8efad5ebbc047565422eddfb6142c9a 137 | ebbc72aecf7ea85162cad471c903afac7e6f15bd3f6f3466da9d36c906ca7d405fc4b53bf7bdc1 138 | 99a7d7a44f9d90b811c392a5f2b773c4d458d0ed266d884b7d2be780f870b9a870032be94f65db 139 | 82556244a943a2a8faa89460ed0d01f36f02b5a4113536b6a51d212ecb64b5a06b993bf887ce52 140 | 4159b4902dad9234d19dc43a65d49d573215e991ee38082f22a71861b620dce460200b0957deeb 141 | 07cbdf250e2ac39a160ec8c9653119f942ea807b743ce5c56be60d148a0e51c8366563cfff9ac1 142 | a0c9e55e0389ac566f496f37a3b868502d7ff021a186328ed93918428fa42998e0b52afa38fa3c 143 | 933e018cd3e5372648335497cf09989b8cb3d206080328d67b7168a4cafed8b4d673c5f2244855 144 | 0b328873f227038ce0985a1eece62da21dd41335dd8e8c68543705d25058dfa283e52715a4400d 145 | 4870c99fb1ddbcb84c3a5fabe3988f2e9fac8833814e14956c538664bbd67029eb01d6858cc5d7 146 | 436d90f1897171b1a99f8eb653b47ff217eb3c54e4068bb146737d71d3db4ea1954704237643f5 147 | 9dd34854c3a53c8e82e091266a0a73ec997089dcee471a182a20cff36f1abbb2ab07dc035501cb 148 | 801ab4056bea0c443235cac401f025f987b6f7d1d83fc95ab2f8df753e3c8fdafc970efc85ba7a 149 | 0feedb404e5884e5b559d721d4293daf3751e54e1b2444881022c716cb52ba4ff4a4bc7783db6f 150 | 0b0afdee641c9f45ccff96363508cd24cfefcedab7ac7dfa3dd3550f2a17b5ad5d4579c8591c52 151 | e1b577c35b34036b4625b9c3153d8828082a2a9739812f69c8f489d682e03fa612e8a00cd02f9c 152 | 2352d6212e92ccfb331b1493419f16dee78808db0c3ba23ae8b0390dbfb60e8a599166f39f10e2 153 | d3a69552ed3b2338d79cdbc77c349b9f6f8059673723e1410f99852d423e5d3d36b24e56fbf2f3 154 | 428d57cc645ecf98151e715db1100d421e2a48a095671a46a4d8c4b1cbe74abc47ee9f3ca9a522 155 | b971f5cf3d63e6d77b4b01f38a50e172eb1c1c130ad2525eab80d6484109377f16efd317a19968 156 | c8e67b69cdeba0a7ec8764b9eb2758ace979b7cce47c00cf06fc4f83c922ecfab47afdc7f33841 157 | d53631576b436c223529069189d5851d2d6ec3fb09cd87608c4015e2d79305f4b2fe3dde650b5e 158 | 6c8cd7afb65e78693006e24bbd376a43e303109471477e6da67661031a496e30cbc5912af7c423 159 | 0c64e26c67f125141408b69c1ebc55a5aa58f5c55e93283c07c48d5d57505137e2c82ec707e0c0 160 | 5a70e673e3879ca4e02011f7683dfe2144a1818f7258dcaa113eb751420dadbde1f323700f09c0 161 | 2326b40e27e0341200cc0a609ea69a0e87ac728ac2015b237dda7bf5d71185ed674e5b618bb75a 162 | 95c644fed95d9088784860ec955607911bee02aa401e69c8a4237e540825b8e60063145fe7040d 163 | 28e2027a98bf302ec0fa48ed1f2dee44b6946c7d417be85f87b63b55835590a4da895efc91f7c8 164 | e8f48ab9b218ea3ffc4b810c20379387c57535963c994debd19b0a64ae6e78bc4e9790ce18ae9e 165 | c937dcf6cdaf9cb1129a6528f7a14769f7f8f5aab93fe4c75900ee1360d45de844d226c9d55648 166 | 91322b5afa92be222988b583699506dce890715a2b510e737a3c4955e58e3f259ebcfed11d6265 167 | 4331984c4d50b257ac09bb4708fb815ed1d54a36c77c9310431087eef21e369e1ecd0f575c4f38 168 | 3c2a3dbb7dd23e3e759fab8a2ab762b9e3b897ee720f423167f75edefd4a08d24aece170695305 169 | 82c246f91fa93d3ab7bdc7a19d8847deabd2e970ce5f8993cba57aa52f212d562e16fc46e8f9e2 170 | 6df700a25380775979b43f0905692a40a58812e62247004866d01bec26a7ca1b92a145530344bd 171 | f1a7e012e0dc9e9214325182f0fe9d805673456db38ceeb9d91ede87745530ec73b2b135d578ea 172 | fc501ca74bb11119a58720efc6b6c560f0d0a1ec75f224845b659d42aaadf10acbcd82cb6c4e8c 173 | 8f86152f7bab470b9bbaeb47186e6e95f157ff9d64dbb546dcdd342f6bd1e949a253c9f51475b6 174 | 0798f9d05798b119f153f126e58bd97717aaa184b82cddd751fbf6eb3fdf5e2b2aa7011600eb0e 175 | 625d4a83ce32f199cea4d789cf0000000000000000000000000000000000000000000000000000000000000000 176 | 0000000000000000000000000000000000000000000000000000000000000000 177 | 0000000000000000000000000000000000000000000000000000000000000000 178 | 0000000000000000000000000000000000000000000000000000000000000000 179 | 0000000000000000000000000000000000000000000000000000000000000000 180 | 0000000000000000000000000000000000000000000000000000000000000000 181 | 0000000000000000000000000000000000000000000000000000000000000000 182 | 0000000000000000000000000000000000000000000000000000000000000000 183 | cleartomark 184 | %%EndResource 185 | %%BeginResource: font f-0-1 186 | %!FontType1-1.1 f-0-1 1.0 187 | 11 dict begin 188 | /FontName /f-0-1 def 189 | /PaintType 0 def 190 | /FontType 1 def 191 | /FontMatrix [0.001 0 0 0.001 0 0] readonly def 192 | /FontBBox {0 -15 487 729 } readonly def 193 | /Encoding 256 array 194 | 0 1 255 {1 index exch /.notdef put} for 195 | dup 1 /uni015B put 196 | dup 2 /uni0144 put 197 | dup 3 /uni0142 put 198 | dup 4 /uni017C put 199 | readonly def 200 | currentdict end 201 | currentfile eexec 202 | f983ef0097ece636fb4a96c74d26ab84185f6dfa4a16a7a1c27bbe3f1156aea698df336d20b467 203 | b10e7f33846656653c5ac6962759d3056cbdb3190bac614b984bf5a132dc418192443014ba63de 204 | 800d392b6fea026574bb2535fd7bb5338f35bf15a88ea328fdaa49670c7852e3d060f3c5d6b07f 205 | 2ef6d0f22646c5d18e19a2ae3ee120390f6dd96f76dcf1e127de5e9299077a00c17c0d71e36e5b 206 | 9d5ec58fceda57739a6a4214d4b79d6c48d2784b60c320323c7acddddf34db833cac0cf109f799 207 | 69d114a330d372e5c978a66acc84e3fe5557f6240856a013ffaa0199444e5c5036f775eba4a5c5 208 | 8cde66cf604b9aca2178431127b8a1ff7ed633a65c04600af5f573483112251cabe8722c0ba224 209 | 7e4445af50cf2457d0f320e3c97746456087766b4bf11115560ce328711eca3b0864c78a2b285b 210 | 9d6055ff6c1e1b1e311a5ab74569db2c39a4253788980273f9e8a8fe68013d38ee02e0f60198bc 211 | d86cbb6e921eede3c752882e3286a3c69d06d01ac06b6b6a8af463003c3810f82b04bc90b37deb 212 | 9d44a4a7c1be5648b764531e8b4cf3af44f37d2f6ce6c89ee1e417259a418552158b70b16f1193 213 | 201d127554b3a7bd6c99444e19c261095dac317bbf19ce919e73238743b4f47ded0396221c5ece 214 | 8697295e5ca9aefbe9c681f46874f1dea75c4abd904d7018a00fba958ce8f8e3ce0f4b668ec5f0 215 | fcbfcae65eabe41ba7e212032cccf77381a6ecfd6c32c75d4f41bdaac155186fa17faf0f4bb8b3 216 | df8ceaca20101440fa1a1cf93bcc07a62187b1b4c208309ee9785668f6bc4341df7666bc0c7fc1 217 | 995549273c9584500c3eb59fdef364c224b3c8cf71c4d6560257ee6324a651187d4314841687d1 218 | 77804fbaea63b82f98aace45a8168bbaf817f70a3208fd53707522b75519f134e9cc77af1919e4 219 | fefa5634e0249ba2477c30484039e4f06cf0cb0c92b1c044a76ee46150b85cc3c560c7977f474c 220 | 57bec009ea2892737b05d293d3bba067970c31108939d632274413ea173214c4902f0bf619def7 221 | 0e382f6b6c4b43ada13a52b16733b6d620d47930b3927b25817c276b535516ab9fb1a95a8d0ad5 222 | 840ac6c5887707cd523ed2d4ff476bea0547c35e24b3902fa33bfda7f215f11650efdee68a0764 223 | ea0295de4c7ad31b36926bfe9d37b81f48e7e5e797d2120ebdda6a5bb17b0000000000000000000000000000000000000000000000000000000000000000 224 | 0000000000000000000000000000000000000000000000000000000000000000 225 | 0000000000000000000000000000000000000000000000000000000000000000 226 | 0000000000000000000000000000000000000000000000000000000000000000 227 | 0000000000000000000000000000000000000000000000000000000000000000 228 | 0000000000000000000000000000000000000000000000000000000000000000 229 | 0000000000000000000000000000000000000000000000000000000000000000 230 | 0000000000000000000000000000000000000000000000000000000000000000 231 | cleartomark 232 | %%EndResource 233 | %%EndSetup 234 | %%Page: 1 1 235 | %%BeginPageSetup 236 | %%PageBoundingBox: 0 0 341 466 237 | %%EndPageSetup 238 | q 0 0 341 466 rectclip 239 | 1 0 0 -1 0 466 cm q 240 | 0 g 241 | 0.75 w 242 | 0 J 243 | 0 j 244 | [] 0.0 d 245 | 10 M q 1 0 0 1 0 0 cm 246 | 116.898 30.375 m 116.898 63.098 l S Q 247 | 116.898 67.035 m 114.273 61.785 l 116.898 63.098 l 119.523 61.785 l h 248 | 116.898 67.035 m f 249 | q 1 0 0 1 0 0 cm 250 | 116.898 67.035 m 114.273 61.785 l 116.898 63.098 l 119.523 61.785 l h 251 | 116.898 67.035 m S Q 252 | BT 253 | 8.25 0 0 -8.25 83.710406 51 Tm 254 | /f-0-0 1 Tf 255 | [(W)7(y)15(genero)12(w)15(anie)-3(...)]TJ 256 | ET 257 | 131.898 15.375 m 131.898 23.66 125.184 30.375 116.898 30.375 c 108.617 258 | 30.375 101.898 23.66 101.898 15.375 c 101.898 7.09 108.617 0.375 116.898 259 | 0.375 c 125.184 0.375 131.898 7.09 131.898 15.375 c h 260 | 131.898 15.375 m f 261 | 4 M q 1 0 0 1 0 0 cm 262 | 131.898 15.375 m 131.898 23.66 125.184 30.375 116.898 30.375 c 108.617 263 | 30.375 101.898 23.66 101.898 15.375 c 101.898 7.09 108.617 0.375 116.898 264 | 0.375 c 125.184 0.375 131.898 7.09 131.898 15.375 c h 265 | 131.898 15.375 m S Q 266 | 1 g 267 | 221.898 450.375 m 221.898 458.66 215.184 465.375 206.898 465.375 c 198.617 268 | 465.375 191.898 458.66 191.898 450.375 c 191.898 442.09 198.617 435.375 269 | 206.898 435.375 c 215.184 435.375 221.898 442.09 221.898 450.375 c h 270 | 221.898 450.375 m f 271 | 0 g 272 | q 1 0 0 1 0 0 cm 273 | 221.898 450.375 m 221.898 458.66 215.184 465.375 206.898 465.375 c 198.617 274 | 465.375 191.898 458.66 191.898 450.375 c 191.898 442.09 198.617 435.375 275 | 206.898 435.375 c 215.184 435.375 221.898 442.09 221.898 450.375 c h 276 | 221.898 450.375 m S Q 277 | 218.148 450.375 m 218.148 456.59 213.113 461.625 206.898 461.625 c 200.688 278 | 461.625 195.648 456.59 195.648 450.375 c 195.648 444.16 200.688 439.125 279 | 206.898 439.125 c 213.113 439.125 218.148 444.16 218.148 450.375 c h 280 | 218.148 450.375 m f 281 | q 1 0 0 1 0 0 cm 282 | 218.148 450.375 m 218.148 456.59 213.113 461.625 206.898 461.625 c 200.688 283 | 461.625 195.648 456.59 195.648 450.375 c 195.648 444.16 200.688 439.125 284 | 206.898 439.125 c 213.113 439.125 218.148 444.16 218.148 450.375 c h 285 | 218.148 450.375 m S Q 286 | 10 M q 1 0 0 1 0 0 cm 287 | 154.398 82.875 m 289.398 82.875 l 289.398 250.598 l S Q 288 | 289.398 254.535 m 286.773 249.285 l 289.398 250.598 l 292.023 249.285 l 289 | h 290 | 289.398 254.535 m f 291 | q 1 0 0 1 0 0 cm 292 | 289.398 254.535 m 286.773 249.285 l 289.398 250.598 l 292.023 249.285 l 293 | h 294 | 289.398 254.535 m S Q 295 | BT 296 | 8.25 0 0 -8.25 236.503863 103.5 Tm 297 | /f-0-0 1 Tf 298 | [(W)6(y)16(genero)12(w)15(anie)-3( fr)6(agme)-3(ntu...)]TJ 299 | ET 300 | q 1 0 0 1 0 0 cm 301 | 86.898 97.875 m 86.898 250.598 l S Q 302 | 86.898 254.535 m 84.273 249.285 l 86.898 250.598 l 89.523 249.285 l h 303 | 86.898 254.535 m f 304 | q 1 0 0 1 0 0 cm 305 | 86.898 254.535 m 84.273 249.285 l 86.898 250.598 l 89.523 249.285 l h 306 | 86.898 254.535 m S Q 307 | BT 308 | 8.25 0 0 -8.25 58.012652 178.5 Tm 309 | /f-0-0 1 Tf 310 | [(W)30(ej)]TJ 311 | /f-0-1 1 Tf 312 | [<01>]TJ 313 | /f-0-0 1 Tf 314 | [(cie)-3( A)10(genta)]TJ 315 | ET 316 | q 1 0 0 1 0 0 cm 317 | 79.398 82.875 m 26.898 82.875 l 26.898 450.375 l 187.121 450.375 l S Q 318 | 191.059 450.375 m 185.809 453 l 187.121 450.375 l 185.809 447.75 l h 319 | 191.059 450.375 m f 320 | q 1 0 0 1 0 0 cm 321 | 191.059 450.375 m 185.809 453 l 187.121 450.375 l 185.809 447.75 l h 322 | 191.059 450.375 m S Q 323 | BT 324 | 8.25 0 0 -8.25 -0.231 324.75 Tm 325 | /f-0-0 1 Tf 326 | [(Zak)19(o)]TJ 327 | /f-0-1 1 Tf 328 | [<02>]TJ 329 | /f-0-0 1 Tf 330 | [(czen)-3(ie...)]TJ 331 | ET 332 | 1 g 333 | 83.898 67.875 m 149.898 67.875 l 152.395 67.875 154.398 69.883 154.398 334 | 72.375 c 154.398 93.375 l 154.398 95.867 152.395 97.875 149.898 97.875 c 335 | 83.898 97.875 l 81.406 97.875 79.398 95.867 79.398 93.375 c 79.398 72.375 336 | l 79.398 69.883 81.406 67.875 83.898 67.875 c h 337 | 83.898 67.875 m f 338 | 0 g 339 | 4 M q 1 0 0 1 0 0 cm 340 | 83.898 67.875 m 149.898 67.875 l 152.395 67.875 154.398 69.883 154.398 341 | 72.375 c 154.398 93.375 l 154.398 95.867 152.395 97.875 149.898 97.875 c 342 | 83.898 97.875 l 81.406 97.875 79.398 95.867 79.398 93.375 c 79.398 72.375 343 | l 79.398 69.883 81.406 67.875 83.898 67.875 c h 344 | 83.898 67.875 m S Q 345 | BT 346 | 9 0 0 -9 105.292682 85.5 Tm 347 | /f-0-0 1 Tf 348 | [(Pus)4(ty)]TJ 349 | ET 350 | 10 M q 1 0 0 1 0 0 cm 351 | 244.398 360.375 m 266.898 360.375 l 266.898 290.152 l S Q 352 | 266.898 286.215 m 269.523 291.465 l 266.898 290.152 l 264.273 291.465 l 353 | h 354 | 266.898 286.215 m f 355 | q 1 0 0 1 0 0 cm 356 | 266.898 286.215 m 269.523 291.465 l 266.898 290.152 l 264.273 291.465 l 357 | h 358 | 266.898 286.215 m S Q 359 | BT 360 | 8.25 0 0 -8.25 239.680377 336 Tm 361 | /f-0-0 1 Tf 362 | (Zej)Tj 363 | /f-0-1 1 Tf 364 | [<01>]TJ 365 | /f-0-0 1 Tf 366 | [(cie)-280(agen)-3(ta)]TJ 367 | ET 368 | q 1 0 0 1 0 0 cm 369 | 206.898 375.375 m 206.898 430.598 l S Q 370 | 206.898 434.535 m 204.273 429.285 l 206.898 430.598 l 209.523 429.285 l 371 | h 372 | 206.898 434.535 m f 373 | q 1 0 0 1 0 0 cm 374 | 206.898 434.535 m 204.273 429.285 l 206.898 430.598 l 209.523 429.285 l 375 | h 376 | 206.898 434.535 m S Q 377 | BT 378 | 8.25 0 0 -8.25 179.769 407.25 Tm 379 | /f-0-0 1 Tf 380 | [(Zak)19(o)]TJ 381 | /f-0-1 1 Tf 382 | [<02>]TJ 383 | /f-0-0 1 Tf 384 | [(czen)-3(ie...)]TJ 385 | ET 386 | 1 g 387 | 173.898 345.375 m 239.898 345.375 l 242.395 345.375 244.398 347.383 244.398 388 | 349.875 c 244.398 370.875 l 244.398 373.367 242.395 375.375 239.898 375.375 389 | c 173.898 375.375 l 171.406 375.375 169.398 373.367 169.398 370.875 c 169.398 390 | 349.875 l 169.398 347.383 171.406 345.375 173.898 345.375 c h 391 | 173.898 345.375 m f 392 | 0 g 393 | 4 M q 1 0 0 1 0 0 cm 394 | 173.898 345.375 m 239.898 345.375 l 242.395 345.375 244.398 347.383 244.398 395 | 349.875 c 244.398 370.875 l 244.398 373.367 242.395 375.375 239.898 375.375 396 | c 173.898 375.375 l 171.406 375.375 169.398 373.367 169.398 370.875 c 169.398 397 | 349.875 l 169.398 347.383 171.406 345.375 173.898 345.375 c h 398 | 173.898 345.375 m S Q 399 | BT 400 | 9 0 0 -9 170.270221 363 Tm 401 | /f-0-0 1 Tf 402 | [(Ma)-279(agen)-3(ta)-277(i)-278(fr)6(ag...)]TJ 403 | ET 404 | 10 M q 1 0 0 1 0 0 cm 405 | 146.898 255.375 m 146.898 102.652 l S Q 406 | 146.898 98.715 m 149.523 103.965 l 146.898 102.652 l 144.273 103.965 l 407 | h 408 | 146.898 98.715 m f 409 | q 1 0 0 1 0 0 cm 410 | 146.898 98.715 m 149.523 103.965 l 146.898 102.652 l 144.273 103.965 l 411 | h 412 | 146.898 98.715 m S Q 413 | BT 414 | 8.25 0 0 -8.25 119.261432 178.5 Tm 415 | /f-0-0 1 Tf 416 | (Zej)Tj 417 | /f-0-1 1 Tf 418 | [<01>]TJ 419 | /f-0-0 1 Tf 420 | [(cie)-3( A)10(genta)]TJ 421 | ET 422 | q 1 0 0 1 0 0 cm 423 | 139.398 285.375 m 139.398 360.375 l 164.621 360.375 l S Q 424 | 168.559 360.375 m 163.309 363 l 164.621 360.375 l 163.309 357.75 l h 425 | 168.559 360.375 m f 426 | q 1 0 0 1 0 0 cm 427 | 168.559 360.375 m 163.309 363 l 164.621 360.375 l 163.309 357.75 l h 428 | 168.559 360.375 m S Q 429 | BT 430 | 8.25 0 0 -8.25 97.517291 339.75 Tm 431 | /f-0-0 1 Tf 432 | [(P)24(o)]TJ 433 | /f-0-1 1 Tf 434 | <03>Tj 435 | /f-0-0 1 Tf 436 | (o)Tj 437 | /f-0-1 1 Tf 438 | <04>Tj 439 | /f-0-0 1 Tf 440 | [(enie)-3( fr)6(agme)-3(ntu...)]TJ 441 | ET 442 | q 1 0 0 1 0 0 cm 443 | 94.398 285.375 m 94.398 439.875 l 191.621 439.875 l S Q 444 | 195.559 439.875 m 190.309 442.5 l 191.621 439.875 l 190.309 437.25 l h 445 | 195.559 439.875 m f 446 | q 1 0 0 1 0 0 cm 447 | 195.559 439.875 m 190.309 442.5 l 191.621 439.875 l 190.309 437.25 l h 448 | 195.559 439.875 m S Q 449 | BT 450 | 8.25 0 0 -8.25 67.269 415.5 Tm 451 | /f-0-0 1 Tf 452 | [(Zak)19(o)]TJ 453 | /f-0-1 1 Tf 454 | [<02>]TJ 455 | /f-0-0 1 Tf 456 | [(czen)-3(ie...)]TJ 457 | ET 458 | 1 g 459 | 83.898 255.375 m 149.898 255.375 l 152.395 255.375 154.398 257.383 154.398 460 | 259.875 c 154.398 280.875 l 154.398 283.367 152.395 285.375 149.898 285.375 461 | c 83.898 285.375 l 81.406 285.375 79.398 283.367 79.398 280.875 c 79.398 462 | 259.875 l 79.398 257.383 81.406 255.375 83.898 255.375 c h 463 | 83.898 255.375 m f 464 | 0 g 465 | 4 M q 1 0 0 1 0 0 cm 466 | 83.898 255.375 m 149.898 255.375 l 152.395 255.375 154.398 257.383 154.398 467 | 259.875 c 154.398 280.875 l 154.398 283.367 152.395 285.375 149.898 285.375 468 | c 83.898 285.375 l 81.406 285.375 79.398 283.367 79.398 280.875 c 79.398 469 | 259.875 l 79.398 257.383 81.406 255.375 83.898 255.375 c h 470 | 83.898 255.375 m S Q 471 | BT 472 | 9 0 0 -9 94.789752 273 Tm 473 | /f-0-0 1 Tf 474 | [(Ma)-279(A)9(genta)]TJ 475 | ET 476 | 10 M q 1 0 0 1 0 0 cm 477 | 311.898 285.375 m 311.898 450.375 l 226.676 450.375 l S Q 478 | 222.738 450.375 m 227.988 447.75 l 226.676 450.375 l 227.988 453 l h 479 | 222.738 450.375 m f 480 | q 1 0 0 1 0 0 cm 481 | 222.738 450.375 m 227.988 447.75 l 226.676 450.375 l 227.988 453 l h 482 | 222.738 450.375 m S Q 483 | BT 484 | 8.25 0 0 -8.25 284.769 414.75 Tm 485 | /f-0-0 1 Tf 486 | [(Zak)19(o)]TJ 487 | /f-0-1 1 Tf 488 | [<02>]TJ 489 | /f-0-0 1 Tf 490 | [(czen)-3(ie...)]TJ 491 | ET 492 | 1 g 493 | 256.398 255.375 m 322.398 255.375 l 324.895 255.375 326.898 257.383 326.898 494 | 259.875 c 326.898 280.875 l 326.898 283.367 324.895 285.375 322.398 285.375 495 | c 256.398 285.375 l 253.906 285.375 251.898 283.367 251.898 280.875 c 251.898 496 | 259.875 l 251.898 257.383 253.906 255.375 256.398 255.375 c h 497 | 256.398 255.375 m f 498 | 0 g 499 | 4 M q 1 0 0 1 0 0 cm 500 | 256.398 255.375 m 322.398 255.375 l 324.895 255.375 326.898 257.383 326.898 501 | 259.875 c 326.898 280.875 l 326.898 283.367 324.895 285.375 322.398 285.375 502 | c 256.398 285.375 l 253.906 285.375 251.898 283.367 251.898 280.875 c 251.898 503 | 259.875 l 251.898 257.383 253.906 255.375 256.398 255.375 c h 504 | 256.398 255.375 m S Q 505 | BT 506 | 9 0 0 -9 263.774127 273 Tm 507 | /f-0-0 1 Tf 508 | [(Ma)-279(fr)6(agm)-3(ent)]TJ 509 | ET 510 | Q Q 511 | showpage 512 | %%Trailer 513 | end 514 | %%EOF 515 | -------------------------------------------------------------------------------- /Dokumentacja/DiagramyStanow/resources/Goal.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MINI-IO/IO-project-game/8b4c8f2b0f00cdc301e24b2930d01685fbd72b0e/Dokumentacja/DiagramyStanow/resources/Goal.pdf -------------------------------------------------------------------------------- /Dokumentacja/DiagramyStanow/resources/Piece.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MINI-IO/IO-project-game/8b4c8f2b0f00cdc301e24b2930d01685fbd72b0e/Dokumentacja/DiagramyStanow/resources/Piece.pdf -------------------------------------------------------------------------------- /Dokumentacja/Dokumentacja.tex: -------------------------------------------------------------------------------- 1 | \documentclass[a4paper]{article} 2 | \usepackage{subfiles} 3 | \usepackage{blindtext} %\blindtext 4 | \usepackage[T1]{fontenc} 5 | \usepackage{lmodern} 6 | \usepackage[polish]{babel} 7 | \usepackage[utf8]{inputenc} 8 | \selectlanguage{polish} 9 | \usepackage[unicode]{hyperref} 10 | \usepackage{amsfonts} %\mathbb 11 | \usepackage{amsmath} %\tag and \eqref 12 | \usepackage{graphicx} %\includegraphics 13 | \usepackage{outlines} 14 | \usepackage{pdfpages} 15 | \usepackage{geometry} 16 | \usepackage{CustomCommands} 17 | \usepackage{svg} 18 | \usepackage{float} 19 | \usepackage{hyperref} 20 | \usepackage{pdflscape} 21 | 22 | \title{IO - The Project Game} 23 | \author{Bartosz Chrostowski 24 | \and Emil Dragańczuk 25 | \and Jakub Drak Sbahi 26 | \and Mikołaj Molenda 27 | \and Alicja Moskal} 28 | \date{} 29 | 30 | \begin{document} 31 | \maketitle 32 | \newpage 33 | \tableofcontents 34 | \newpage 35 | \subfile{Jezyk.tex} 36 | \newpage 37 | \subfile{Reguly.tex} 38 | \subfile{furps.tex} 39 | \begin{samepage} 40 | \newpage 41 | \section{Diagram systemu} 42 | System złożony jest z 3 modułów komunikujących się ze sobą przez TCP. 43 | W celu uniknięcia skomplikowanej logiki buforowania wiadomości, każdy moduł kończy pracę na niepowodzenie komunikacji, 44 | System należy odpalać w kolejności CS -> GM -> Agenty, inna kolejność uruchamiania może powodować zamknięcie całego systemu kaskadowo. 45 | \includeDiagram[width=\textwidth]{resources/systemArchitecture.pdf}{Diagram systemu} 46 | \end{samepage} 47 | 48 | % Przypadki użycia 49 | \subfile{./PrzypadkiUzycia/PrzypadkiUzycia.tex} 50 | \subfile{./MierzenieCzasu.tex} 51 | \subfile{./Komunikacja.tex} 52 | \subfile{./Konfiguracje/Konfiguracje.tex} 53 | \subfile{./DiagramyKlas/DiagramyKlas.tex} 54 | \subfile{./DiagramyAktywnosci/DiagramyAktywnosci.tex} 55 | \subfile{./DiagramySekwencji/DiagramySekwencji.tex} 56 | \subfile{./DiagramyStanow/DiagramyStanow.tex} 57 | \end{document} 58 | 59 | -------------------------------------------------------------------------------- /Dokumentacja/Jezyk.tex: -------------------------------------------------------------------------------- 1 | \documentclass[Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \paragraph{Język} 5 | \begin{itemize} 6 | \item \textbf{GM} \textit{Game master} - moduł odpowiedzialny za prowadzenie rozgrywki 7 | \item \textbf{Agent} \textit{Player} - moduł sterujący graczem, utożsamiany z \textbf{graczem} 8 | \item \textbf{Serwer komunikacyjny} \textit{Communications Server} - serwer odpowiedzialny za komunikację między Agentami a GM 9 | \item \textbf{plansza} - macierz na której rozgrywana jest gra 10 | \item \textbf{pole} \textit{field} - komórka macierzy planszy 11 | \item \textbf{fragment} \textit{piece} - obiekt pojawiający się na polu zadań, który należy położyć na cel 12 | \item \textbf{fragment fikcyjny} \textit{sham piece} - fragment który po położeniu w polu bramkowym nie powoduje informacji zwrotnej czy pole było celem 13 | \item \textbf{pole zadań} \textit{Tasks area} - zbiór pól niebędących polami bramkowymi na których mogą pojawić się fragmenty 14 | \item \textbf{cel} \textit{goal} - pole znajdujące się w polu bramkowym na które należy położyć fragment 15 | \item \textbf{pole bramkowe} \textit{Goals area} - zbiór pól na których mogą być cele 16 | \item \textbf{akcja} - czynność wykonywana przez agenta związana z rozgrywką 17 | \item \textbf{akcja odkrycia} \textit{discovery} - akcja agenta polegająca na odpytaniu o odległości przylegajacyh do agenta pól 18 | \item \textbf{punkty} - ilość celów zakrytych fragmentami 19 | \item \textbf{blokada} - czas podczas którego Agent nie może wykonywać akcji 20 | \end{itemize} 21 | \end{document} 22 | -------------------------------------------------------------------------------- /Dokumentacja/Komunikacja.tex: -------------------------------------------------------------------------------- 1 | \documentclass[Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \section{Komunikacja} 5 | \label{sec:komunikacja} 6 | 7 | Komunikacja odbywa się za pośrednictwem protokołu TCP oddzielone znakiem nowej linii. 8 | Wiadomości nie powinny przekraczać długości 8 KiB. Wiadomości kodowane są w UTF-8. 9 | Utrata połączenia z którymkolwiek modułem skutkuje w każdym z modułów 10 | poinformowaniem użytkownika i zakończeniem działania. Wiadomości wysyłane są w formacie JSON. 11 | Wiadomości wysyłane przez GM i Agentów opakowywane są w adapter opisujący kontekst wysyłanej wiadomości. 12 | Pole \textit{agentID} uzupełniane jest przez serwer na podstawie jego własnego mapowania 13 | klientów na identyfikatory. Po nawiązaniu połączenia przez Agenta z serwerem, 14 | serwer nadaje mu unikane \textit{agentID} (liczbę całkowitą), które będzie służyło do korelacji oraz będzie 15 | wykorzystywane przez GM w logice gry. 16 | \textit{agentID} może być unikalną losowa wartością lub kolejną wartością predefiniowanego ciągu 17 | unikalnych wartości. To samo \textit{agentID} 18 | wysyłane jest do Agenta w odpowiedzi na prośbę o dołączenie 19 | oraz w wiadomości o rozpoczęciu rozgrywki. Ponowne połączenia po utracie komunikacji nie są możliwe. 20 | 21 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/messageWrapper.json} 22 | \subsection{Wiadomości Agenta} 23 | \subsubsection{Zapytanie czy trzymany fragment jest fikcyjny} 24 | \textit{Payload} pusty 25 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/AgentMes/checkForScham.json} 26 | 27 | \subsubsection{Zapytanie o zniszczenie fragmentu} 28 | \textit{Payload} pusty 29 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/AgentMes/destroyPiece.json} 30 | 31 | \subsubsection{Zapytanie o akcję odkrycia} 32 | \textit{Payload} pusty 33 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/AgentMes/discovery.json} 34 | 35 | \subsubsection{Odpowiedź na wymianę informacji} 36 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/AgentMes/infomationExchangeRespond.json} 37 | 38 | \subsubsection{Zapytanie o wymianę informacji} 39 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/AgentMes/informationExchangeAsk.json} 40 | 41 | \subsubsection{Zapytanie o dołączenie do rozgrywki} 42 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/AgentMes/joinGame.json} 43 | 44 | \subsubsection{Zapytanie o ruch} 45 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/AgentMes/makeMove.json} 46 | 47 | \subsubsection{Zapytanie o podniesienie fragmentu} 48 | \textit{Payload} pusty 49 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/AgentMes/pickPiece.json} 50 | 51 | \subsubsection{Zapytanie o położenie fragmentu} 52 | \textit{Payload} pusty 53 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/AgentMes/putPiece.json} 54 | 55 | 56 | \subsection{Wiadomości GM} 57 | \subsubsection{Odpowiedź na sprawdzenie fikcyjności} 58 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/GMMes/checkForSchamResponse.json} 59 | 60 | \subsubsection{Odpowiedź na prośbę o zniszczenie fragmentu} 61 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/GMMes/destroyPieceResponse.json} 62 | 63 | \subsubsection{Odpowiedź na akcję discovery} 64 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/GMMes/discoveryResponse.json} 65 | 66 | \subsubsection{Wiadomość o zakończeniu gry} 67 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/GMMes/gameEnd.json} 68 | 69 | \subsubsection{Wiadomość o rozpoczęciu gry} 70 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/GMMes/gameStart.json} 71 | 72 | \subsubsection{Wiadomość przekazująca zapytanie o wymianę informacji do adresata} 73 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/GMMes/informationExchangeAskForward.json} 74 | 75 | \subsubsection{Odpowiedź na zapytanie o dołączenie} 76 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/GMMes/joinGameResponse.json} 77 | 78 | \subsubsection{Odpowiedź na zapytanie o ruch} 79 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/GMMes/makeMoveResponse.json} 80 | 81 | \subsubsection{Odpowiedź na podniesienie kawałka} 82 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/GMMes/pickPieceResponse.json} 83 | 84 | \subsubsection{Odpowiedź na położenie kawałka} 85 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/GMMes/putPieceResponse.json} 86 | 87 | \subsubsection{Wiadomość przekazująca odpowiedź na zapytanie o wymianę informacji} 88 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/GMMes/informationExchangeRespondForward.json} 89 | 90 | \subsection{Wiadomości błędów} 91 | 92 | \subsubsection{Błędny ruch} 93 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/Errors/invalidMove.json} 94 | 95 | \subsubsection{Błąd podniesienia kawałka} 96 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/Errors/pickPiece.json} 97 | 98 | \subsubsection{Błąd położenia kawałka} 99 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/Errors/putPieceError.json} 100 | 101 | \subsubsection{Nie odczekanie kary} 102 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/Errors/timePenaltyError.json} 103 | 104 | \subsubsection{Niezdefiniowany błąd} 105 | \lstinputlisting[language=json]{./DefinicjeWiadomosci/Errors/undefinedErrorMessage.json} 106 | 107 | \subsection{Id wiadomości} 108 | 109 | \subsubsection{Wiadomości Agenta} 110 | \begin{tabular}{ |p{1cm}|p{12cm}| } 111 | \hline 112 | Id & Nazwa wiadomości \\ 113 | \hline 114 | 001 & Zapytanie czy trzymany fragment jest fikcyjny \\ 115 | 002 & Zapytanie o zniszczenie fragmentu \\ 116 | 003 & Zapytanie o akcję odkrycia \\ 117 | 004 & Odpowiedź na wymianę informacji \\ 118 | 005 & Zapytanie o wymianę informacji \\ 119 | 006 & Zapytanie o dołączenie do rozgrywki \\ 120 | 007 & Zapytanie o ruch \\ 121 | 008 & Zapytanie o podniesienie fragmentu \\ 122 | 009 & Zapytanie o położenie fragmentu \\ 123 | \hline 124 | \end{tabular} 125 | 126 | \subsubsection{Wiadomości GM} 127 | \begin{tabular}{ |p{1cm}|p{12cm}| } 128 | \hline 129 | Id & Nazwa wiadomości \\ 130 | \hline 131 | 101 & Odpowiedź na sprawdzenie fikcyjności \\ 132 | 102 & Odpowiedź na prośbę o zniszczenie fragmentu \\ 133 | 103 & Odpowiedź na akcję discovery \\ 134 | 104 & Wiadomość o zakończeniu gry \\ 135 | 105 & Wiadomość o rozpoczęciu gry \\ 136 | 106 & Wiadomość przekazująca zapytanie o wymianę informacji do adresata \\ 137 | 107 & Odpowiedź na zapytanie o dołączenie \\ 138 | 108 & Odpowiedź na zapytanie o ruch \\ 139 | 109 & Odpowiedź na podniesienie kawałka \\ 140 | 110 & Odpowiedź na położenie kawałka \\ 141 | 111 & Wiadomość przekazująca odpowiedź na zapytanie o wymianę informacji \\ 142 | \hline 143 | \end{tabular} 144 | 145 | \subsubsection{Wiadomości błędów} 146 | \begin{tabular}{ |p{1cm}|p{12cm}| } 147 | \hline 148 | Id & Nazwa wiadomości \\ 149 | \hline 150 | 901 & Błędny ruch \\ 151 | 902 & Błędne odłożenie kawałka \\ 152 | 903 & Błędne położenie kawałka \\ 153 | 904 & Nie odczekanie kary \\ 154 | 905 & Niezdefiniowany błąd \\ 155 | \hline 156 | \end{tabular} 157 | 158 | \end{document} 159 | -------------------------------------------------------------------------------- /Dokumentacja/Konfiguracje/Konfiguracje.tex: -------------------------------------------------------------------------------- 1 | \documentclass[./../Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \section{Konfiguracje} 5 | \label{sec:Konfiguracje} 6 | \subsection{Serwer Komunikacyjny} 7 | Konfiguracja Serwera Komunikacyjnego pobierana jest z pliku konfiguracyjnego w postaci JSON, 8 | bądź jako parametry wywołania programu. 9 | \lstinputlisting[language=json]{./resources/CS.jsonc} 10 | \subsection{Agent} 11 | Parametry pobierane są z pliku konfiguracyjnego w postaci JSON, w przypadku gdy taki nie istnieje 12 | CLI odpytuje użytkownika o wprowadzenie potrzebnych parametrów. 13 | \lstinputlisting[language=json]{./resources/Agent.jsonc} 14 | \subsection{GM} 15 | GM zgodnie z założeniami posiada GUI, parametry konfiguracyjne są wybierane przez użytkownika w 16 | oknie ustawień przed rozpoczęciem rozgrywki, domyślne wartości uzupełniane są na podstawie pliku 17 | konfiguracyjnego w postaci JSON. 18 | \lstinputlisting[language=json]{./resources/GM.jsonc} 19 | \subsection{Przykładowe pliki konfiguracyjne} 20 | \subsubsection{Serwer Komunikacyjny} 21 | \lstinputlisting[language=json]{./resources/CSConfig.json} 22 | \subsubsection{Agent} 23 | \lstinputlisting[language=json]{./resources/AgentConfig.json} 24 | \subsubsection{GM} 25 | \lstinputlisting[language=json]{./resources/GMConfig.json} 26 | \end{document} 27 | -------------------------------------------------------------------------------- /Dokumentacja/Konfiguracje/resources/Agent.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["CsIP", "CsPort", "teamID"], 5 | "properties": { 6 | "CsIP": { "type": "string" }, 7 | "CsPort": { "type": "integer" }, 8 | "teamID": { "type": "string", "enum": ["red", "blue"] }, 9 | "strategy": { "type": "integer" } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Dokumentacja/Konfiguracje/resources/AgentConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "CsIP": "192.168.0.0", 3 | "CsPort": 3729, 4 | "teamID": "blue", 5 | "strategy": 3 6 | } -------------------------------------------------------------------------------- /Dokumentacja/Konfiguracje/resources/CS.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["portAgentow", "portGM"], 5 | "properties": { 6 | "portAgentow": { "type":"integer" }, 7 | "portGM": { "type":"integer" } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Dokumentacja/Konfiguracje/resources/CSConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "portAgentow": 3727, 3 | "portGM": 3728 4 | } -------------------------------------------------------------------------------- /Dokumentacja/Konfiguracje/resources/GM.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "required":["CsIP", "CsPort", "movePenalty", "askPenalty", 5 | "discoveryPenalty", "putPenalty", "checkForShamPenalty", 6 | "destroyPiecePenalty" "boardX", "boardY", "goalAreaHight", 7 | "numberOfGoals", "numberOfPieces", "shamPieceProbability" ], 8 | "properties": { 9 | "CsIP": { "type": "string" }, 10 | "CsPort": { "type": "integer" }, 11 | "movePenalty": { "type": "integer" }, 12 | "informationExchangePenalty": { "type": "integer" }, 13 | "discoveryPenalty": { "type": "integer" }, 14 | "putPenalty": { "type": "integer" }, 15 | "checkForShamPenalty": { "type": "integer" }, 16 | "destroyPiecePenalty": { "type": "integer" }, 17 | "boardX": { "type": "integer" }, 18 | "boardY": { "type": "integer" }, 19 | "goalAreaHight": { "type": "integer" }, 20 | "numberOfGoals": { "type": "integer" }, 21 | "numberOfPieces": { "type": "integer" }, 22 | "teamSize": { "type": "integer" }, 23 | "shamPieceProbability": { "type":"number" } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Dokumentacja/Konfiguracje/resources/GMConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "CsIP": "192.168.0.0", 3 | "CsPort": 12313, 4 | "movePenalty": 1500, 5 | "informationExchangePenalty": 1000, 6 | "discoveryPenalty": 700, 7 | "putPenalty": 500, 8 | "checkForShamPenalty": 700, 9 | "destroyPiecePenalty": 500, 10 | "boardX": 40, 11 | "boardY": 40, 12 | "goalAreaHeight": 5, 13 | "numberOfGoals": 5, 14 | "numberOfPieces": 10, 15 | "teamSize" : 2, 16 | "shamPieceProbability": 0.50 17 | } 18 | -------------------------------------------------------------------------------- /Dokumentacja/MierzenieCzasu.tex: -------------------------------------------------------------------------------- 1 | \documentclass[Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \section{Mierzenie czasów} 5 | Czasy liczone są indywidualnie przez każdy moduł, 6 | synchronizacja czasów nie jest prowadzona. 7 | Czasy kar podane w konfiguracji są przez GM zaokrąglane do 10ms i taka powinna być dokładność 8 | zegarów wszystkich modułów. 9 | Agenty powinny same być w stanie obliczyć, kiedy mogą wykonać 10 | kolejną akcję na podstawie długości kar i czasów wysłania/odebrania wiadomości. 11 | GM na podstawie własnego zegara decyduje czy agent odczekał karę. 12 | \end{document} 13 | -------------------------------------------------------------------------------- /Dokumentacja/PrzypadkiUzycia/Agent.tex: -------------------------------------------------------------------------------- 1 | \documentclass[../Dokumentacja.tex]{subfiles} 2 | \begin{document} 3 | \subsection{Agent PU} 4 | Agent jest graczem w \textbf{The Project Game}. Należy do jednej z dwóch drużyn. Integruje się z modułem \textbf{Game Master} poprzez moduł \textbf{Serwera Komunikacyjnego}. Przed wykonaniem jakichkolwiek akcji musi dołączyć do rozgrywki wysyłając odpowiednie zapytanie do GM. Posiada ograniczoną wiedzę na temat aktualnego stanu planszy i może ją zdobywać poprzez wykonywanie akcji oraz przez wymianę informacji z innymi graczami, zatem jego wiedza może być nieprawdziwa. Z tego powodu, aby wykonać jakąkolwiek akcję, agent musi uprzednio odpytać o nią GM, który posiada pełną wiedzę na temat aktualnego stanu planszy i może sprawdzić poprawność i wynik akcji. Celem Agenta jest wygrana drużyny do której należy, poprzez realizację obranej strategii. 5 | 6 | \includeDiagramFullPage[width=\textwidth]{resources/Agent-Agent.pdf}{Diagram przypadków użycia modułu Agent i aktora Agent} 7 | 8 | \begin{itemize} 9 | \item Dołączenie do rozgrywki 10 | \begin{itemize} 11 | \item Odbywa się poprzez połączenie się z Serwerem Komunikacyjnym na podstawie danych połączenia wprowadzonych przez użytkownika i wykonanie odpowiedniego zapytania do GM. Jeśli połączenie nie powiodło się, Agent kończy działanie. 12 | \item Odpowiedź zwrotna może być negatywna, w tym przypadku Agent kończy działanie. 13 | \item W przypadku odpowiedzi pozytywnej, Agent aktualizuje swoje informacje o parametrach rozgrywki na podstawie informacji otrzymanych z GM i przystępuje do oczekiwania na informację o rozpoczęciu rozgrywki, podczas którego nie wykonuje żadnych czynności. 14 | \end{itemize} 15 | 16 | \item Trwająca rozgrywka 17 | \begin{itemize} 18 | \item Agent może wygenerować akcję na podstawie swojej strategii, przed wysłaniem zapytania do GM, powinien uprzednio odczekać czas kary nałożony przez GM w ramach wykonania poprzedniej akcji, w przeciwnym przypadku otrzyma odpowiedź o błędzie od GM. 19 | \item W zależności od typu akcji, agent generuje różne rodzaje zapytań do GM. Akcje niewymagające przesyłania dodatkowych informacji do GM to: odłożenie fragmentu, sprawdzenie fragmentu, oraz wykonanie akcji odkrycia. Zapytanie o ruch wymaga wyspecyfikowania kierunku, zapytanie o wymianę informacji wymaga wyspecyfikowania id pytanego gracza, a odpowiedź na wymianę informacji wymaga wyspecyfikowania wiedzy agenta. 20 | \item Na każde zapytanie agent otrzymuje odpowiedź, którą powinien odebrać i zinterpretować, na podstawie nich Agent może zaktualizować stan swojej wiedzy o planszy. Jeśli była to odpowiedź o błędzie, Agent może na podstawie jej zawartości zsynchronizować się z GM. 21 | \item W trakcie trwającej rozgrywki Agent może otrzymać zapytanie o udzielenie informacji. W takim przypadku powinien, albo odpowiedzieć na takie zapytanie natychmiastowo, lub odłożyć taką odpowiedź na później i wysłać ją w ramach wygenerowania akcji na podstawie strategii. Jeśli zapytanie zostało wysłane przez lidera, odpowiedź jest obligatoryjna i agent powinien odpowiedzieć na takie zapytanie natychmiastowo. 22 | \end{itemize} 23 | \item Zakończenie rozgrywki 24 | \begin{itemize} 25 | \item W trakcie rozgrywki Agent może otrzymać informację o jej zakończeniu. W przypadku takiej informacji, niezależnie od powodu zakończenia rozgrywki, Agent powinien zakończyć działanie. 26 | \item Informacją o zakończeniu rozgrywki jest zarówno specjalna wiadomość wygenerowana przez GM, jak i każda informacja o błędzie połączenia. Nie są prowadzone ponowne próby połączenia. 27 | \end{itemize} 28 | \end{itemize} 29 | \end{document} 30 | -------------------------------------------------------------------------------- /Dokumentacja/PrzypadkiUzycia/GameMaster.tex: -------------------------------------------------------------------------------- 1 | \documentclass[../Dokumentacja.tex]{subfiles} 2 | \begin{document} 3 | \subsection{Game Master} 4 | Moduł Game Master przeprowadza całą rozgrywkę w The Project Game. Przechowuje aktualny stan gry, 5 | a każda akcja Agentów musi najpierw zostać odnotowana i zwalidowana przez niego. 6 | Cała komunikacja między Agentami i Game Masterem odbywa się poprzez moduł Serwera Komunikacyjnego. 7 | Game Master odpowiada także za dostarczenie interfejsu graficznego do prezentacji stanu gry i wyników. 8 | 9 | \includeDiagramFullPage[width=\textwidth]{resources/GM-GM.pdf}{Diagram przypadków użycia modułu GM i aktora GM} 10 | 11 | \begin{itemize} 12 | \item Inicjacja 13 | \begin{itemize} 14 | \item GM pobiera parametry rozgrywki z domyślnej konfiguracji, bądź dostarczonej przez użytkownika. 15 | \item Jeśli konfiguracja została podana przez użytkownika, Game Master sprawdza czy ilość pól dostępnych na planszy jest większa niż maksymalna ilość graczy. Jeśli nie odpytuje użytkownika o ponowne wprowadzenie konfiguracji. 16 | \item Nawiązuje połączenie z Serwerem Komunikacyjnym na podstawie danych połączenia zawartych w konfiguracji, w przypadku nieudanej próby połączenia kończy działanie. 17 | \item Generuje nową planszę na podstawie konfiguracji oraz przejście do oczekiwania na dołączenie agentów. 18 | \end{itemize} 19 | \item Obsługa prośby o dołączenie 20 | \begin{itemize} 21 | \item Game Master może odrzucić lub zaakceptować prośbę, w zależności od limitu Agentów w drużynie określonej w konfiguracji. 22 | \end{itemize} 23 | \item Rozpoczęcie rozgrywki 24 | \begin{itemize} 25 | \item Na komendę użytkownika GM rozpoczyna rozgrywkę. 26 | \item Ustala początkowe pozycje każdego z agentów, liderów drużyn i pozycje fragmentów. 27 | \item Wysyła informację o rozpoczęciu do wszystkich agentów, wraz z początkowymi danymi na temat planszy (wielkość planszy, wielkosć stref punktowych, pozycja startowa Agenta, oraz identyfikatory pozostałych Agentów i ich liderów). 28 | \item Przechodzi w stan obsługi zapytań agentów. 29 | \end{itemize} 30 | \item Obsługa zapytań Agentów 31 | \begin{itemize} 32 | \item Game Master na podstawie globalnego stanu planszy waliduje zapytanie Agenta i jeśli zapytanie jest nieprawidłowe odsyła informację o błędzie i jego przyczynie. 33 | \item Jesli zapytanie było prawidłowe, GM na podstawie aktualnego stanu mapy generuje odpowiedź dla Agenta i wysyła ją. 34 | \item Akcja agenta może spowodować zmianę stanu planszy, w tym wygenerowanie nowego kawałka jeśli akcją było odłożenie fragmentu w polu bramkowym lub zniszczenie go. 35 | \item Akcja agenta może również spowodować zmianę stanu punktacji drużyn, jeśli tak się stało GM powinien sprawdzić czy rozgrywka nie powinna zostać zakończona. 36 | \end{itemize} 37 | \item Prezentowanie stanu planszy wraz z wynikiem 38 | \begin{itemize} 39 | \item Game Master w graficznym interfejsie użytkownika prezentuje aktualny stan planszy, wyniki drużyn oraz meczowe statystyki. 40 | \item Każda akcja zmieniająca stan planszy powoduje aktualizację wyświetlanego widoku. 41 | \end{itemize} 42 | \item Zakończenie rozgrywki 43 | \begin{itemize} 44 | \item Zakończenie rozgrywki może być rezultatem trzech zdarzeń, wygraną którejś z drużyn, zarządzeniem zakończenia przez użytkownika oraz utratą połączenia z Serwerem Komunikacyjnym. 45 | \item Po zakończeniu Game Master, o ile to możliwe, wysyła informacje o końcu gry do Agentów i prezentuje statystyki w interfejsie graficznym. 46 | \end{itemize} 47 | \end{itemize} 48 | 49 | \end{document} 50 | -------------------------------------------------------------------------------- /Dokumentacja/PrzypadkiUzycia/PrzypadkiUzycia.tex: -------------------------------------------------------------------------------- 1 | \documentclass[../Dokumentacja.tex]{subfiles} 2 | \begin{document} 3 | \section{Przypadki Użycia} 4 | \subfile{Agent.tex} 5 | \subfile{GameMaster.tex} 6 | \subfile{Uzytkownik.tex} 7 | \end{document} 8 | -------------------------------------------------------------------------------- /Dokumentacja/PrzypadkiUzycia/Uzytkownik.tex: -------------------------------------------------------------------------------- 1 | \documentclass[../Dokumentacja.tex]{subfiles} 2 | \begin{document} 3 | \subsection{Użytkownik} 4 | Użytkownik jest jest osobą obsługującą The Project Game. 5 | Inicjuje wszystkie moduły. Posiada wymienione poniżej możliwości ingerencji 6 | w działanie poszczególnych modułów. 7 | \subsubsection{Moduł Serwera Komunikacyjnego} 8 | \includeDiagram[width=\textwidth]{resources/USER-SERVER.pdf}{Diagram przypadków użycia modułu Serwera Komunikacyjnego i aktora Użytkownik} 9 | 10 | \begin{itemize} 11 | \item Włączanie serwera 12 | \begin{itemize} 13 | \item Ustawianie portów do połączeń z GM oraz agentami. 14 | \item Ustawianie limitu ilości połączeń. 15 | \end{itemize} 16 | \item Wyłączanie serwera w dowolnym momencie 17 | \end{itemize} 18 | 19 | \subsubsection{Moduł agenta} 20 | \includeDiagram[width=\textwidth]{resources/USER-AGENT.pdf}{Diagram przypadków użycia modułu Agent i aktora Użytkownik} 21 | \begin{itemize} 22 | \item Inicjowanie agenta 23 | \begin{itemize} 24 | \item Zainicjowanie agenta wymaga parametrów połączenia z Serwerem Komunikacyjnym. 25 | \item Wyspecyfikowanie do której drużyny należy agent (Red, Blue). 26 | \item Wybranie strategii używanej podczas gry przez agenta spośród zaimplementowanych w module agenta. Od wybranej strategii zależy sposób podejmowania przez agenta takich decyzji jak: przesunięcie się na planszy, opuszczenie fragmentu, czy odpowiedź innemu agentowi na zapytanie. Wybór strategi sprowadza się do wybrania identyfikatora strategii spośród specyfikowanych przez konkretnego agenta. 27 | \end{itemize} 28 | \item Wyłączanie agenta 29 | \begin{itemize} 30 | \item Agenta można wyłączyć w każdym momencie, nie ma to wpływu na przebieg rozgrywki w której uczestniczył. 31 | \end{itemize} 32 | \end{itemize} 33 | 34 | \subsubsection{Moduł GM} 35 | \includeDiagram[width=\textwidth]{resources/USER-GM.pdf}{Diagram przypadków użycia modułu GM i aktora Użytkownik} 36 | \begin{itemize} 37 | \item Inicjowanie GM 38 | \begin{itemize} 39 | \item Zainicjowanie GM wymaga wprowadzanie parametrów połączeń. 40 | \end{itemize} 41 | \item Użytkownik ma możliwość skonfigurowania parametrów rozgrywki, przed jej rozpoczęciem 42 | \begin{itemize} 43 | \item Ilość celów w polu bramkowym 44 | \item Wymiary pola bramkowego 45 | \item Opóźnienie w wykonywaniu ruchów przez agenta 46 | \item Wymiary planszy 47 | \item Maksymalna ilość agentów 48 | \item Prawdopodobieństwo, że pojawiający się fragment jest fragmentem fikcyjnym 49 | \item Ilość fragmentów na planszy 50 | \end{itemize} 51 | \item Rozpoczynanie rozgrywki 52 | \begin{itemize} 53 | \item Użytkownik może zażądać rozpoczęcia rozgrywki, od tego momentu GM przechodzi w stan wyświetlania planszy i nie możliwa jest zmiana kofiguracji rozgrywki. 54 | \end{itemize} 55 | \item Wyświetlanie planszy 56 | \begin{itemize} 57 | \item Wyświetlenie graficznej interpretacji aktualnego stany gry. Na widoku znajduje się mapa z rozmieszeniem pól, Agentów, fragmetów i podstawowe statystyki rozgrywki. 58 | \end{itemize} 59 | \item Zakończenie rozgrywki 60 | \begin{itemize} 61 | \item W dowolnym momencie trwającej rozgrywki, użytkownik może zażądać zakończenia jej. Żądanie to przekierowuje na ekran z statystykami rozgrywki po czym kończy działanie GM. 62 | \end{itemize} 63 | \end{itemize} 64 | \end{document} 65 | -------------------------------------------------------------------------------- /Dokumentacja/PrzypadkiUzycia/resources/Agent-Agent.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MINI-IO/IO-project-game/8b4c8f2b0f00cdc301e24b2930d01685fbd72b0e/Dokumentacja/PrzypadkiUzycia/resources/Agent-Agent.pdf -------------------------------------------------------------------------------- /Dokumentacja/PrzypadkiUzycia/resources/GM-GM.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MINI-IO/IO-project-game/8b4c8f2b0f00cdc301e24b2930d01685fbd72b0e/Dokumentacja/PrzypadkiUzycia/resources/GM-GM.pdf -------------------------------------------------------------------------------- /Dokumentacja/PrzypadkiUzycia/resources/USER-AGENT.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MINI-IO/IO-project-game/8b4c8f2b0f00cdc301e24b2930d01685fbd72b0e/Dokumentacja/PrzypadkiUzycia/resources/USER-AGENT.pdf -------------------------------------------------------------------------------- /Dokumentacja/PrzypadkiUzycia/resources/USER-GM.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MINI-IO/IO-project-game/8b4c8f2b0f00cdc301e24b2930d01685fbd72b0e/Dokumentacja/PrzypadkiUzycia/resources/USER-GM.pdf -------------------------------------------------------------------------------- /Dokumentacja/PrzypadkiUzycia/resources/USER-SERVER.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MINI-IO/IO-project-game/8b4c8f2b0f00cdc301e24b2930d01685fbd72b0e/Dokumentacja/PrzypadkiUzycia/resources/USER-SERVER.pdf -------------------------------------------------------------------------------- /Dokumentacja/Reguly.tex: -------------------------------------------------------------------------------- 1 | \documentclass[Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \section{Reguły} 5 | Gracze - Agenci są podzieleni na dwie drużyny: czerwoną i niebieską. Agenci w obrębie drużyny muszą ze sobą współpracować. Możliwe akcje dla Agentów: 6 | \begin{itemize} 7 | \item ruch po planszy 8 | \item odkrycie 8 przyległych pól 9 | \item sprawdzenie fikcyjności fragmentu 10 | \item zniszczenie fragmentu 11 | \item odłożenie fragmentu 12 | \item wymiana informacji z innym agentem 13 | \end{itemize} 14 | 15 | Całość rozgrywki odbywa się na wygenerowanej planszy na której znajdują się Agenci, projekty (zbiory pól - celi dla danej drużyny) i fragmenty. Agenci poruszają się po planszy i zbierają fragmenty, aby przenieść je i ułożyć na swoich celach. 16 | 17 | Plansza podzielona jest na 3 rozłączne obszary, kolejno: pole bramkowe drużyny czerwonej, pole zadań i pole bramkowe drużyny niebieskiej. Wymiary planszy są ustalane przed rozpoczęciem rozgrywki. W polach bramkowych znajdują się ukryte cele dla odpowiadających im drużyn. W polu zadań podczas rozgrywki pojawiają się fragmenty i fragmenty fikcyjne. 18 | 19 | \textbf{Celem każdej drużyny jest skompletowanie projektu, czyli zakrycie odpowiednich pól zebranymi fragmentami. Wygrywa drużyna, która jako pierwsza zakryje wszystkie swoje pola celów.} 20 | 21 | Projekty generowane są na początku rozgrywki, identyczne dla każdej drużyny. Pola projektu początkowo są ukryte. Agenci w trakcie rozgrywki mogą je odkryć tylko przez położenie na nie fragmentu. 22 | 23 | \includeDiagram[width=0.5\textwidth]{resources/game.png}{Mapa planszy} 24 | \subsection{Założenia ogólne} 25 | \begin{itemize} 26 | \item Są dwie drużyny 27 | \item Powierzchnia pól bramkowych jest równa dla obu drużyn 28 | \item Pole bramkowe zawsze ma szerokość taką jak szerokość pola planszy 29 | \item Pola bramkowe stanowi $n$ pierwszych i $n$ ostatnich wierszy planszy, $n > 0$ 30 | \item Pola bramkowe są spójne 31 | \item Powierzchnia pola zadań oraz powierzchnia obu pól bramkowych są niezerowe 32 | \item Pola bramkowe (ułożenie celów) obu drużyn są symetryczne względem środka planszy 33 | \item Odległości liczone są w metryce Manhattan 34 | \item Każda akcja powoduje założenie na agenta blokady, na czas zależny od akcji i określony przed rozgrywką, podczas której nie może wykonywać akcji 35 | \item W każdej drużynie jest jeden lider 36 | \item Projekty do ułożenia są dla każdej drużyny identyczne 37 | \item Warunkiem wygranej jest zakrycie wszystkich celów, czyli zdobycie tylu punktów ile jest celów 38 | \end{itemize} 39 | \subsection{Kary czasowe} 40 | \begin{itemize} 41 | \item Każda akcja (oraz zapytanie o wymianę informacji i odpowiedź na wymianę informacji) 42 | wiąże się z koniecznością odczekania czasu przed kolejną akcją 43 | \item W przypadku wysłania zapytania przed upłynięciem kary czasowej, jest ono ignorowane przez GM i wysyłany jest stosowny komunikat błędu 44 | \item Kary czasowe ustalane są przed rozgrywką 45 | \end{itemize} 46 | \subsection{Poruszanie} 47 | \begin{itemize} 48 | \item Agent może poruszać się w 4 kierunkach: zachód, północ, wschód, południe, to jest; może przemieścić się na pole które jest przyległe do pola na którym się znajduje 49 | \item Agent może przebywać na dowolnym polu planszy niezajętym przez innego Agenta i nie należącym do pola bramkowego drużyny przeciwnej 50 | \item Próba ruchu poza planszę skutkuje brakiem ruchu 51 | \item Próba poruszenia się na pole zajęte przez innego agenta skutkuje brakiem ruchu 52 | \item Próba poruszenia się dwóch różnych agentów na te samo pole skutkuje poruszeniem się jednego z nich, wybór agenta do poruszenia jest dowolny 53 | \item Agent wchodzący do pola otrzymuje odległość tego pola od najbliższego kawałka który może podnieść 54 | \end{itemize} 55 | \subsection{Fragmenty} 56 | \begin{itemize} 57 | \item Na każdym polu planszy, które nie jest polem bramkowym, może znajdować się dowolna ilość fragmentów 58 | \item Agent może podnieść fragment jedynie z pola na którym on sam się znajduje 59 | \item Agent może trzymać maksymalnie jeden fragment 60 | \item Na początku rozgrywki generowana jest określona liczba fragmentów, która jest skonfigurowana przed rozpoczęciem rozgrywki 61 | \item Fragmenty generowane są przez Game Mastera zaraz po wiadomości o odłożeniu lub zniszczeniu kawałka przez Agenta, a następnie umieszczane na losowe pole zadań 62 | \item Fragmenty mogą być fikcyjne 63 | \item Odłożenie wygenerowanego przez Game Mastera fragmentu na pole na którym znajduje się Agent, skutkuje natychmiastowym podniesieniem fragmentu przez tego Agenta, jeśli nie trzyma on już innego fragmentu. W przeciwnym przypadku fragment odkładany jest na pole 64 | \item Odłożenie fragmentu niefikcyjnego na polu bramkowym które jest celem skutkuje przyznaniem punktu drużynie do której należy dane pole bramkowe. Natomiast żaden gracz nie może wejść na pole bramkowe drużyny przeciwnej. 65 | \item Odłożenie fragmentu niefikcyjnego na polu bramkowym które nie jest celem zwraca informację agentowi, że cel nie został osiągnięty 66 | \item Odłożenie fragmentu fikcyjnego na polu bramkowym zwraca informację agentowi, że dany fragment był fikcyjny oraz nie przyznaje punktów, nawet jeśli dane pole było celem 67 | \item Cel na który został odłożony fragment niefikcyjny przestaje być celem, czyli kolejne odłożenie na nim fragmentu nie przyznaje punktów 68 | \item Odłożenie fragmentu na polu bramkowym skutkuje wyłączeniem tego fragmentu z gry, nie można go już podnieść 69 | \item Fragment trzymany przez gracza w każdym momencie może być przetestowany na bycie fikcyjnym 70 | \item Przetestowany na fikcyjność fragment którego wynik jest pozytywny, jest natychmiast niszczony 71 | \item Fragment trzymany przez gracza w każdym momencie może być zniszczony 72 | \end{itemize} 73 | \subsection{Akcja odkrycia} 74 | \begin{itemize} 75 | \item Udziela informacji o odległościach w metryce Manhattan pól przyległych oraz ze wspólnymi wierzchołkami do pola na którym znajduje się Agent 76 | \item Jeśli Agent znajduje się na krawędzi planszy, nie otrzymuje informacji o polach znajdujących się poza planszą 77 | \end{itemize} 78 | \subsection{Wymiana informacji} 79 | \begin{itemize} 80 | \item W każdym momencie gry agent może zarządzać wymiany informacji z innym agentem 81 | \item Odpowiedź na zapytanie agenta niebędącego liderem drużyny pytanego agenta nie jest obligatoryjna 82 | \item Odpowiedź na zapytanie agenta będącego liderem drużyny pytanego agenta jest obligatoryjna i skutkuje zablokowaniem akcji pytanego agenta do udzielenia przez niego odpowiedzi 83 | \item Odpowiedź na zapytanie może zostać udzielona w dowolnym czasie od zapytania o wymianę informacji, ale nie może zostać wysłana jeśli takie zapytanie nie miało wcześniej miejsca 84 | \item Udzielane informacje nie muszą być prawdziwe 85 | \end{itemize} 86 | 87 | \end{document} 88 | -------------------------------------------------------------------------------- /Dokumentacja/UserStories.tex: -------------------------------------------------------------------------------- 1 | \documentclass[Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | 5 | \section{User stories} 6 | \subsection{Użytkownik} 7 | \subsubsection{W module serwera} 8 | \begin{itemize} 9 | \item Chce ustawić parametry serwera ?` port jeśli TCP ? 10 | \end{itemize} 11 | 12 | \subsubsection{W module GM} 13 | \begin{itemize} 14 | \item Chce skonfigurować połączenie z modułem serwera 15 | \item Chce skonfigurować parametry gry 16 | \begin{itemize} 17 | \item wielkość planszy 18 | \item wielkość pola bramkowego 19 | \item ilość celów ?` i jaki kształt stanowią ? 20 | \item opóźnienia między poszczególnymi czynnościami agentów 21 | \item ilość agentów 22 | \item prawdopodobieństwo wygenerowanie fragmentu fikcyjnego 23 | \item ilość fragmentów na planszy (wliczając obecnie podniesione fragmenty) 24 | \end{itemize} 25 | \item Chce wyświetlić planszę 26 | \item Chce rozpocząć rozgrywkę 27 | \item Chce zakończyć rozgrywkę 28 | \end{itemize} 29 | 30 | 31 | \subsubsection{W module agenta} 32 | \begin{itemize} 33 | \item Chce skonfigurować połączenie z modułem serwera 34 | \item Chce ustawić strategię 35 | \item Chce ustawić drużynę do której należy 36 | \end{itemize} 37 | 38 | 39 | \subsection{Agent} 40 | \begin{itemize} 41 | \item Chce dołączyć do rozgrywki/drużyny 42 | \item Chce wybrać kolejną akcję na podstawie obranej strategii 43 | \item Chce odpytać o poprawność wykonania i wykonać akcję: 44 | \begin{itemize} 45 | \item ruch 46 | \item akcję odkrycia 47 | \item odłożenie fragmentu 48 | \item sprawdzenie czy fragment jest fikcyjny 49 | \item zapytanie o wiedzę innego agenta 50 | \end{itemize} 51 | \item Chce odbierać wiadomości i poprawnie reagować na nie 52 | \begin{itemize} 53 | \item Walidacja akcji; zmieniając stan lokalnej planszy 54 | \item Zakończenie rozgrywki; kończąc pracę 55 | \item Zapytanie o wiedzę; odsyłając posiadane informacje 56 | \end{itemize} 57 | \end{itemize} 58 | 59 | \subsection{GM} 60 | \begin{itemize} 61 | \item Chce walidować poprawność otrzymanego zapytania 62 | \item Chce aktualizować stan planszy w przypadku zapytań modyfikujących jej 63 | \item Chce odpowiadać na zapytania 64 | \item Chce rozesłać informację o zakończeniu rozgrywki 65 | \item Chce obliczyć podsumowanie rozgrywki 66 | \end{itemize} 67 | \end{document} 68 | -------------------------------------------------------------------------------- /Dokumentacja/Wyjatki.tex: -------------------------------------------------------------------------------- 1 | \documentclass[Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \section{Sytuacje wyjątkowe} 5 | \subsection{} 6 | \subsection{Utrata połączenia} 7 | W przypadku utraty połączenia z innym modułem lub błędem wysłania wiadomości nadawca powinien poinformować użytkownika 8 | oraz zakończyć działanie. Rozwiązanie te powoduje kaskadowe zakończenie działania całego systemu. 9 | \subsection{Błąd modułu} 10 | W przypadku gdy moduł napotka nieobsługiwany błąd wewnętrzny niezwiązany z rozgrywką powinien poinformować użytkownika 11 | oraz zakończyć działanie. Tym samym zakończy to kaskadowo działanie całego systemu. 12 | 13 | \subsection{Reliability} 14 | \begin{itemize} 15 | \item system powinien być niewrażliwy na ewentualne odłączenie się innych modułów, 16 | wykryć takie zachowanie i odpowiednio zareagować, 17 | \item system powinien być odporny na przesyłanie do poszczególnych modułów niepoprawnych wiadomości, 18 | \item serwer komunikacyjny powinien zapisywać logi z niepoprawnymi wiadomościami. 19 | \end{itemize} 20 | 21 | \subsection{Performance} 22 | \begin{itemize} 23 | \item Instalując moduł Game Mastera i serwera komunikacyjnego na przeciętnym laptopie system powinien obsłużyć około 40 agentów, 24 | a wielkość planszy powinna mieć pomijalny wpływ na wydajność gry, 25 | \item skalowalność systemu powinna zależeć od ilości wątków procesora ze względu na asynchroniczny charakter pracy modułów 26 | Game Mastera i serwera komunikacyjnego. 27 | \end{itemize} 28 | 29 | \subsection{Supportability} 30 | \begin{itemize} 31 | \item system powinien mieć domyślne ustawienia, które zostają każdorazowo nadpisane przez odpowiednie pliki konfiguracyjne, 32 | \item system powinien działać w sieciach wspierających protokół TCP/IP, 33 | \item system powinien być aplikacją typu portable, czyli taką do którą można uruchomić bez instalacji, 34 | \item system powinien być napisany możliwe przenośnie, to znaczy maksymalnie ułatwiając jego przeniesie na inny system operacyjny. 35 | \end{itemize} 36 | 37 | \end{document} 38 | -------------------------------------------------------------------------------- /Dokumentacja/furps.tex: -------------------------------------------------------------------------------- 1 | \documentclass[Dokumentacja.tex]{subfiles} 2 | 3 | \begin{document} 4 | \section{FURPS - wymagania niefunkcjonalne} 5 | \subsection{Usability} 6 | \begin{itemize} 7 | \item system powinien działać po podaniu właściwych opcji konfiguracyjnych, 8 | \item moduł GM powinien wyświetlać estetyczną planszę z przebiegiem rozgrywki, 9 | \item system powinien działać na domyślnej konfiguracji modułów. 10 | \end{itemize} 11 | 12 | \subsection{Reliability} 13 | \begin{itemize} 14 | \item system powinien być niewrażliwy na ewentualne odłączenie się innych modułów, 15 | wykryć takie zachowanie i odpowiednio zareagować, 16 | \item system powinien być odporny na przesyłanie do poszczególnych modułów niepoprawnych wiadomości, 17 | \item serwer komunikacyjny powinien zapisywać logi z niepoprawnymi wiadomościami. 18 | \end{itemize} 19 | 20 | \subsection{Performance} 21 | \begin{itemize} 22 | \item Instalując moduł Game Mastera i serwera komunikacyjnego na przeciętnym laptopie, system powinien obsłużyć około 40 agentów, 23 | a wielkość planszy powinna mieć pomijalny wpływ na wydajność gry, 24 | \item skalowalność systemu powinna zależeć od ilości wątków procesora ze względu na asynchroniczny charakter pracy modułów 25 | Game Mastera i serwera komunikacyjnego. 26 | \end{itemize} 27 | 28 | \subsection{Supportability} 29 | \begin{itemize} 30 | \item system powinien mieć domyślne ustawienia, które zostają każdorazowo nadpisane przez odpowiednie pliki konfiguracyjne, 31 | \item system powinien działać w sieciach wspierających protokół TCP/IP, 32 | \item system powinien być aplikacją typu portable, czyli taką którą można uruchomić bez instalacji, 33 | \item system powinien być napisany możliwe przenośnie, to znaczy maksymalnie ułatwiając jego przeniesienie na inny system operacyjny. 34 | \end{itemize} 35 | 36 | \end{document} 37 | -------------------------------------------------------------------------------- /Dokumentacja/resources/game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MINI-IO/IO-project-game/8b4c8f2b0f00cdc301e24b2930d01685fbd72b0e/Dokumentacja/resources/game.png -------------------------------------------------------------------------------- /Dokumentacja/resources/systemArchitecture.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MINI-IO/IO-project-game/8b4c8f2b0f00cdc301e24b2930d01685fbd72b0e/Dokumentacja/resources/systemArchitecture.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IO-project-game 2 | Alicja Moskal, Bartosz Chrostowski, Emil Dragańczuk, Jakub Drak Sbahi, Mikołaj Molenda 3 | ### [[WAŻNE]](https://github.com/MINI-IO/IO-project-game/issues/101) 4 | ### [Pobierz najnowszy pdf](https://github.com/MINI-IO/IO-project-game/releases/latest) 5 | -------------------------------------------------------------------------------- /UML/ActivityDiagram/CommunicationServer.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam shadowing false 3 | skinparam monochrome true 4 | skinparam sequenceGroupBorderThickness 0.5 5 | (*) --> "Ustawienie portów do połączeń z GM oraz agentami" 6 | "Ustawienie portów do połączeń z GM oraz agentami" --> "Ustawienie limitu połączeń" 7 | "Ustawienie limitu połączeń" --> "Oczekiwanie na połączenie z GM" 8 | "Oczekiwanie na połączenie z GM" --> "Oczekiwanie na graczy" 9 | "Oczekiwanie na graczy" --> "Zmapowanie deskryptorów graczy do id w grze" 10 | "Zmapowanie deskryptorów graczy do id w grze" --> ===B1=== 11 | --> "Czekaj na wiadomość od GM" 12 | --> "Wyślij wiadomość do agenta" 13 | if "Sygnał wyłączenia serwera" then 14 | -->[true] (*) 15 | else 16 | -->[false] "Czekaj na wiadomość od GM" 17 | endif 18 | 19 | ===B1=== --> "Czekaj na wiadomość od agenta" 20 | --> "Wyślij wiadomość do GM" 21 | if "Sygnał wyłączenia serwera" then 22 | -->[true] (*) 23 | else 24 | -->[false] "Czekaj na wiadomość od agenta" 25 | endif 26 | 27 | @enduml 28 | -------------------------------------------------------------------------------- /UML/ActivityDiagram/GM-RequestFlow.txt: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | skinparam shadowing false 4 | skinparam monochrome true 5 | 6 | title Game Master - Obsługa zapytania Agenta 7 | 8 | 9 | start 10 | 11 | :Odbierz zapytanie Agenta; 12 | 13 | :Zwaliduj żądaną akcje 14 | na podstawie stanu planszy; 15 | 16 | if (Stan planszy umożliwania wykonanie akcji?) then (Tak) 17 | 18 | if (Akcja zmienia stan planszy?) then (Tak) 19 | 20 | :Zaktualizuj stan planszy; 21 | 22 | else (Nie) 23 | 24 | endif 25 | 26 | :Przygotuj odpowiedź zezwalającą 27 | na wykonanie akcji; 28 | 29 | else (Nie) 30 | 31 | :Przygotuj odpowiedź 32 | odmawiającą wykonania akcji, 33 | z uzasadnieniem jeśli to wymagane; 34 | 35 | endif 36 | 37 | :Wyślij odpowiedź do Serwera; 38 | 39 | stop 40 | 41 | @enduml -------------------------------------------------------------------------------- /UML/ActivityDiagram/GM-StartFlow.txt: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | skinparam shadowing false 4 | skinparam monochrome true 5 | 6 | title Game Master - Rozpoczynanie rozgrywki 7 | 8 | 9 | start 10 | 11 | :Użyj domyślnych parametrów do połączenia z Serwerem; 12 | 13 | while (Pomyślne połączenie z Serwerem?) is (Nie) 14 | :Poproś użytkownika o wprowadzenie 15 | własnych parametrów do połączenia z Serwerem; 16 | 17 | :Użyj wprowadzonych parametrów do połączenia z Serwerem; 18 | endwhile (Tak) 19 | 20 | if (Użytkownik chce spersonalizowaną 21 | konfigurację planszy?) then (Tak) 22 | :Załaduj konfiguracje planszy użytkownika; 23 | else (Nie) 24 | :Załaduj domyślną konfigurację planszy; 25 | endif 26 | 27 | :Wygeneruj planszę na podstawie konfiguracji; 28 | 29 | if (Użytkownik chce określić ilość Agentów?) then (Tak) 30 | :Zaktualizuj ilość Agentów w grze; 31 | else (Nie) 32 | :Korzystaj z domyślnej ilości Agentów; 33 | endif 34 | 35 | repeat 36 | :Czekaj na powiadomienie o dołączeniu Agenta; 37 | repeat while (Oczekiwana ilość dołączonych Agentów osiągnięta?) 38 | 39 | :Wygeneruj pozycje startowe Agentów; 40 | 41 | :Wyślij każdemu Agentowi informacje o 42 | rozpoczęciu rozgrywki wraz z informacją 43 | o konfiguracji planszy oraz jego miejscu 44 | startowym; 45 | 46 | stop 47 | 48 | @enduml -------------------------------------------------------------------------------- /UML/ActivityDiagram/csConnection.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam shadowing false 3 | skinparam monochrome true 4 | skinparam sequenceGroupBorderThickness 0.5 5 | |Agent| 6 | start 7 | :Połączenie z portem pobranym z konfiguracji; 8 | |CS| 9 | :Odebranie informacji o połączeniu agenta\nna porcie TCP; 10 | :Nadaj agentowi unikalne id; 11 | |Agent| 12 | :Przejście do dołączania do rozgrywki; 13 | stop 14 | @enduml 15 | -------------------------------------------------------------------------------- /UML/ActivityDiagram/joinGame.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam shadowing false 3 | skinparam monochrome true 4 | skinparam sequenceGroupBorderThickness 0.5 5 | |Agent| 6 | start 7 | :Wyślij zapytanie o dołączenie do rozgrywki; 8 | |GM| 9 | |CS| 10 | :Opakuj wiadomość id wysyłającego agenta; 11 | if () then (GM połączony) 12 | |GM| 13 | :Sprawdzenie czy może dołączyć; 14 | 15 | if () then (Agent może dołączyć) 16 | |Agent| 17 | :Poinformowanie o dołączniu i\nprzejście do oczekiwania na\nrozpoczęcie; 18 | stop 19 | else (Agent nie może dołączyć) 20 | |Agent| 21 | :Poinformowanie o odrzuceniu dołączenia \n zakończenie działania programu; 22 | stop 23 | endif 24 | else (GM niepołączony) 25 | |CS| 26 | :Odłóż wiadomość na kolejkę wiadomości; 27 | stop 28 | endif 29 | 30 | 31 | @enduml 32 | -------------------------------------------------------------------------------- /UML/ActivityDiagram/startGame.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam shadowing false 3 | skinparam monochrome true 4 | skinparam sequenceGroupBorderThickness 0.5 5 | |Agent| 6 | |CS| 7 | |GM| 8 | start 9 | :Poinformowanie użytkownika o rozpoczęciu> 10 | :Przygotowanie i rozesłanie wiadomości\no rozpocząciu do wszystkich graczy; 11 | |CS| 12 | :Odpakowanie wiadomości; 13 | :Przesłanie zawartości wiadomości do Agenta; 14 | |Agent| 15 | :Interpretacja zawartości wiadomości i\nustawienie parametrów strategii na\npodstawie otrzymanych informacji; 16 | :Wykonywanie strategii; 17 | stop 18 | 19 | 20 | @enduml 21 | -------------------------------------------------------------------------------- /UML/ClassDiagram/Communicator.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam shadowing false 3 | skinparam monochrome true 4 | skinparam classAttributeIconSize 0 5 | hide circles 6 | 7 | skinparam class { 8 | BackgroundColor white 9 | } 10 | 11 | Communicator <.. AgentMessage 12 | Communicator <.. GMMessage 13 | Communicator *-right-"1" ISender 14 | 15 | class Communicator { 16 | - correlation: Dictionary 17 | - GMDescriptor: Descriptor 18 | - messageService: ISender 19 | + SendMessageToAgent(GMMessage) 20 | + SendMessageToGM(AgentMessage) 21 | } 22 | 23 | class AgentMessage { 24 | + payload: string 25 | } 26 | 27 | class GMMessage { 28 | + id: int 29 | + payload: string 30 | } 31 | 32 | interface ISender <> { 33 | + SendMessage() 34 | } 35 | @enduml 36 | -------------------------------------------------------------------------------- /UML/ClassDiagram/GM.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | skinparam shadowing false 4 | skinparam monochrome true 5 | skinparam classAttributeIconSize 0 6 | hide circle 7 | 8 | skinparam class { 9 | BackgroundColor white 10 | } 11 | 12 | AbstractField <|-- GoalField 13 | AbstractField <|-- NonGoalField 14 | AbstractField <|-- TaskField 15 | 16 | class AbstractField 17 | { 18 | - x: Int {readOnly} 19 | - y: Int {readOnly} 20 | - WhosHere: Player 21 | - pieces: AbstractPiece {seq} 22 | + Leave(Player) 23 | + PickUp(Player) 24 | + Put(Piece): Boolean 25 | + MoveHere(Player p): Boolean 26 | + ContainsPieces(): Boolean 27 | + GetPosition(): Int[2] 28 | } 29 | 30 | class GoalField 31 | { 32 | + PickUp(Player) 33 | + Put(Piece): Boolean 34 | } 35 | 36 | class NonGoalField 37 | { 38 | + PickUp(Player) 39 | + Put(Piece): Boolean 40 | } 41 | 42 | class TaskField 43 | { 44 | + PickUp(Player) 45 | + Put(Piece): Boolean 46 | } 47 | 48 | class Configuration 49 | { 50 | + movePenalty: TimeSpan {readOnly} 51 | + askPenalty: TimeSpan {readOnly} 52 | + discoveryPenalty: TimeSpan {readOnly} 53 | + putPenalty: TimeSpan {readOnly} 54 | + checkPenalty: TimeSpan {readOnly} 55 | + responsePenalty: TimeSpan {readOnly} 56 | + x: Int {readOnly} 57 | + y: Int {readOnly} 58 | + numberOfGoals: Int {readOnly} 59 | } 60 | 61 | GM *-left-"1" Configuration 62 | 63 | class GM 64 | { 65 | + AcceptMessage() 66 | + GenerateGUI() 67 | ~ Discover(Field) 68 | ~ EndGame() 69 | - players: Dictionary {readOnly} 70 | - map: Field[][] {readOnly} 71 | - LegalKnowledgeReplies: Int[2] {unique} 72 | - conf: Configuration 73 | - GeneratePiece() 74 | - ForwardKnowledgeQuestion() 75 | - ForwardKnowledgeReply() 76 | ~ RedTeamPoints: int 77 | ~ BlueTeamPoints: int 78 | } 79 | 80 | 81 | enum Team <> 82 | { 83 | Red 84 | Blue 85 | } 86 | GM *--"2..*" Player 87 | Player o--"0..1" AbstractField 88 | Player *-right-"1" MessageSenderService 89 | Player .down.> Team 90 | AbstractField o--"0..*" AbstractPiece 91 | class Player 92 | { 93 | + tryLock(TimeSpan): Boolean 94 | + Move(Field) 95 | + DestroyHolding() 96 | + CheckHolding() 97 | + Discover(GM) 98 | + Put() : Boolean 99 | ~ SetHolding(Piece) 100 | ~ GetPosition(): Int[2] 101 | - id: Int 102 | - messageCorrelationId: Int 103 | - team: Team 104 | - isLeader: Boolean 105 | - holding: Piece 106 | - position: AbstractField 107 | - LockedTill: Time 108 | - messageService: MessageSenderService 109 | } 110 | 111 | interface MessageSenderService <> 112 | { 113 | + SendMessage() 114 | } 115 | 116 | GM *--"4..*" AbstractField 117 | 118 | AbstractPiece <|-- ShamPiece 119 | AbstractPiece <|-- NormalPiece 120 | 121 | Player --"0..1" AbstractPiece 122 | 123 | class AbstractPiece 124 | { 125 | + CheckForSham(): Boolean 126 | + Put(AbstractField): Int 127 | } 128 | class ShamPiece 129 | { 130 | + CheckForSham(): Boolean 131 | + Put(AbstractField): Int 132 | } 133 | class NormalPiece 134 | { 135 | + CheckForSham(): Boolean 136 | + Put(AbstractField): Int 137 | } 138 | 139 | @enduml 140 | -------------------------------------------------------------------------------- /UML/ClassDiagram/Player.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam shadowing false 3 | skinparam monochrome true 4 | skinparam classAttributeIconSize 0 5 | hide circles 6 | 7 | skinparam class { 8 | BackgroundColor white 9 | } 10 | 11 | IStrategy <|.. Strategy 12 | Player *-- "4..*" Field 13 | Player *-- "1" IStrategy 14 | Player *-- "1" ISender 15 | Player ..> GoalInfo 16 | Player ..> Team 17 | 18 | class Player { 19 | - id: int 20 | - sender: ISender 21 | + penaltyTime: int 22 | + team: Team 23 | + isLeader: bool 24 | + hasPiece: bool 25 | + board Field[,] 26 | + position: Tuple 27 | + waitingPlayers: List 28 | - strategy: IStrategy 29 | + teamMates: int[] 30 | 31 | + Player() 32 | + JoinTheGame() 33 | + Start() 34 | + Stop() 35 | + Move() 36 | + Put() 37 | + BegForInfo() 38 | + GiveInfo() 39 | + RequestsResponse() 40 | + CheckPiece() 41 | + AcceptMessage() 42 | + MakeDecisionFromStrategy() 43 | - Communicate() 44 | - Penalty() 45 | } 46 | 47 | class Field{ 48 | + goalInfo: GoalInfo 49 | + playerInfo: bool 50 | + distToPiece: int 51 | } 52 | 53 | interface IStrategy <> { 54 | + MakeDecision() 55 | } 56 | 57 | interface ISender <> { 58 | + SendMessage() 59 | } 60 | 61 | 62 | class Strategy { 63 | + MakeDecision() 64 | } 65 | 66 | enum Team <> { 67 | Red 68 | Blue 69 | } 70 | 71 | enum GoalInfo <> { 72 | IDK 73 | DiscoveredNotGoal 74 | DiscoveredGoal 75 | } 76 | @enduml 77 | -------------------------------------------------------------------------------- /UML/SequenceDiagram/Agent_odmowa.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam shadowing false 3 | skinparam monochrome true 4 | skinparam sequenceGroupBorderThickness 0.5 5 | 6 | actor Agent 7 | participant "Serwer Komunikacyjny" as sk 8 | participant "Game Master" as gm 9 | 10 | activate Agent 11 | Agent -> sk: dolaczDoRozgrywki() 12 | activate sk 13 | sk ->> gm: dolaczAgentaDoRozgrywki() 14 | activate gm 15 | gm -->> sk: odmowaDolaczenia() 16 | deactivate gm 17 | sk -->> Agent: odmowaDolaczenia() 18 | deactivate sk 19 | deactivate Agent 20 | @enduml -------------------------------------------------------------------------------- /UML/SequenceDiagram/Agent_zaakceptowany.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam shadowing false 3 | skinparam monochrome true 4 | skinparam sequenceGroupBorderThickness 0.5 5 | 6 | actor Agent 7 | participant "Serwer Komunikacyjny" as sk 8 | participant "Game Master" as gm 9 | participant "Agent" as ag 10 | 11 | activate Agent 12 | Agent -> sk: dolaczDoRozgrywki() 13 | activate sk 14 | sk ->> gm: dolaczAgentaDoRozgrywki() 15 | activate gm 16 | gm -->> sk: potwierdzDolaczenie() 17 | deactivate gm 18 | sk -->> Agent: potwierdzDolaczenie() 19 | deactivate sk 20 | deactivate Agent 21 | 22 | gm ->> sk: rozpocznijRozgrywke() 23 | activate gm 24 | deactivate gm 25 | activate sk 26 | sk ->> Agent: rozpocznijRozgrywke() 27 | activate Agent 28 | 29 | loop 30 | opt 31 | ag ->> sk: zapytanieDoInnegoAgenta() 32 | activate ag 33 | sk ->> Agent: zapytanieOdInnegoAgenta() 34 | end 35 | alt 36 | Agent -->> sk: odpowedzNaZapytanieInnegoAgenta() 37 | sk -->> ag: przekazOdpowiedzNaZapytanie() 38 | deactivate ag 39 | else 40 | Agent ->> sk: wyslijZapytanieDoAgenta() 41 | else 42 | Agent ->> sk: wykonajRuch() 43 | else 44 | Agent ->> sk: podniesKawalek() 45 | else 46 | Agent ->> sk: odlozKawalek() 47 | else 48 | Agent ->> sk: sprawdzKawalek() 49 | end 50 | sk -->> Agent: odpowedzNaAkcje() 51 | end 52 | deactivate Agent 53 | deactivate sk 54 | 55 | gm ->> sk: zakonczRozgrywke() 56 | activate gm 57 | deactivate gm 58 | activate sk 59 | sk ->> Agent: zakonczRozgrywke() 60 | activate Agent 61 | deactivate sk 62 | deactivate Agent 63 | @enduml -------------------------------------------------------------------------------- /UML/SequenceDiagram/CS.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | skinparam shadowing false 4 | skinparam monochrome true 5 | skinparam sequenceGroupBorderThickness 0.5 6 | 7 | actor User 8 | participant "Serwer Komunikacyjny" as sk 9 | participant "Game Master" as gm 10 | participant "Agent" as ag 11 | 12 | User -> sk: Uruchom serwer 13 | activate User 14 | activate sk 15 | sk <- gm: połączZSerwerem() 16 | activate gm 17 | 18 | sk <- ag: DołączDoGry() 19 | sk -> gm: AgentDołącza() 20 | deactivate gm 21 | deactivate sk 22 | 23 | loop 24 | alt Wiadomość od Agenta 25 | sk <- ag: zapytanieAgenta() 26 | activate sk 27 | sk -->> gm: zapytanieAgenta() 28 | deactivate sk 29 | 30 | else Wiadomość od GMa 31 | sk <- gm: wiadmośćGMa() 32 | activate sk 33 | sk -->> ag: wiadomośćGMa() 34 | deactivate sk 35 | end 36 | opt Użytkownik wyłącza serwer 37 | User -> sk: WyłączSerwer() 38 | deactivate User 39 | end 40 | end 41 | 42 | @enduml 43 | -------------------------------------------------------------------------------- /UML/SequenceDiagram/GM.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | skinparam shadowing false 4 | skinparam monochrome true 5 | skinparam sequenceGroupBorderThickness 0.5 6 | 7 | actor User 8 | participant "Game Master" as gm 9 | participant "Serwer Komunikacyjny" as sk 10 | 11 | User -> gm: rozpocznijGre() 12 | activate User 13 | activate gm 14 | gm -> sk: rozpocznijGre() 15 | activate sk 16 | 17 | sk <- Agent: dolaczDoRozgrywki() 18 | sk -> gm: dolaczAgentaDoRozgrywki() 19 | gm -->> sk: czyAgentGra() 20 | sk -->> Agent : czyAgentGra() 21 | deactivate sk 22 | 23 | gm -->> User: graRozpoczeta() 24 | deactivate gm 25 | deactivate User 26 | 27 | loop 28 | sk <- Agent :zapytanieAgenta() 29 | activate sk 30 | sk -> gm: zapytanieAgenta() 31 | activate gm 32 | gm -->> sk: odpowiedzAgentowi() 33 | sk -->> Agent : odpowiedzAgentowi() 34 | deactivate sk 35 | 36 | gm -->> User: aktualizujStanPlanszy() 37 | deactivate gm 38 | end 39 | 40 | opt uzytkownik konczy gre 41 | User -> gm: zakonczGre() 42 | activate User 43 | activate gm 44 | end 45 | 46 | gm ->> sk: zakonczGre() 47 | activate sk 48 | sk ->> Agent : graZakonczona() 49 | deactivate sk 50 | 51 | gm ->> User: wynikGry() 52 | deactivate gm 53 | deactivate User 54 | 55 | deactivate User 56 | deactivate gm 57 | deactivate sk 58 | 59 | @enduml 60 | -------------------------------------------------------------------------------- /UML/StateDiagram/AgentStates.drawio: -------------------------------------------------------------------------------- 1 | 1Vtbd6o4FP41PraLu/rY2tuaOZ162pnVnr5FSDEVCCvGKvz6SSTIJVGpRWn7Itlsbl++/e2dDe2Zo3B1S0A8vcceDHqG5q165lXPMHRLG7AfbkkyS3+gZQafIE84FYYnlEJhzN0WyIPziiPFOKAorhpdHEXQpRUbIAQvq25vOKheNQY+lAxPLghk6zPy6DSzDmytsN9B5E/zK+ua2DMB7swneBGJ6/UM8239l+0OQX4u4T+fAg8vSybzumeOCMY02wpXIxhwbHPYsuNutuzd3DeBEW1ywOrv8fXZxL5PVtHsykpuHl7v/jkznOw0HyBYCED+Iwt3ikMEIwQ5xj47PxCPQJMcNugxFMUQEzrFPo5AcF1YL9fQQH5xjY0Kn18Yx8yoM+M7pDQRlAALiplpSsNA7IWRd8EnmA3dAMznyM2MNyjIXWQMBCxzvCAu3PXggmqA+JDu8LMyP/64pQsIhG8hDiElCXMgMAAUfVRJBQQ3/Y1fMT9sQ0zRZ6ZLmi1pYhjNYr7JzsZCCFYhfWPQjXCAydrX1NZ/3I4jKuZBH4hxyU/wegfeH5BQuNqJUL43jwehF7lcLIvgs4RpWoq73NY6pGZzSMOVzzXwfJ7Mw+AcuPQGMT5XEeZAIKYuv8AEBmM8RxThiO2bYEpxyBwCvuNyox0qlPNzXATI58dSHjBtYG/qdhV7u2PwhxL4Y5Im772R1RsOXa4/HcjOCtGX0vYffqpzW4yuVuLM60EiBofrkNNQh/rfSofy5F2auOeYSTXw0ixtOAF7mMsJYVs+32LQAHbp3sjsXZok+1l2MbuHz5TVcKactmdqfSjLhCApOcQYRXReOvOYG0oya1Vl1tRq1cHn/NlGdgcFZzaPcjiNLIlFD24KZ2gJstojAtlcgYK1Kl0m67qwxA29OufLKaLwKQbr6V0yCWc2ILTVZTyApB15HVYh1B1ZXTfV40nk1ZCT2yuY4d7I7g0sd0uoEpz6JFnOUJfiywRXM0sCrJ9rmrNTgvlgDAliyPH5bC7LziONft/f/bX6/fKHXrw+hjfjRV4V7A12s2GwC4awx7I0o8KSs7weOq4emKajTP3b9GCPf1UPpKNrNd7mGfO7xW9vc4Zrnd8tSIphy5rikXThZmQfyXz/l1EGL2gnbN+/wmHMJclLznE+KNUjfFhEw3qUlEf1eIDBZH2xvMA8SeXyyRA5084NW3dOERO6XluK9Btx/PgklhflirwIZi6MKXDfuSUmKUzZ7+39T8uSRvdZUl5Vd6oJIuD1FgL+8Ojutxzdx41k266RarA7u9X9G0Z+nhuHw8rRea28ud0MXXGU6jZalRBlASOnwUecxthNu11bb7JZweeM3pr2BYLX2Nca47eXhl0tvPtNMgPZN9PfLSWw6rK7nLCr/q+Gz3pZJLfCczQXYXDDl6pbgJOaEBI+ChS3t1FrCmYqWnlmXwWZeSzMBhJmXUjMYYqgfCBFhav0659IEXbdZMevBL7EZaPee1KE/7Ha0tsntKqyk/m6a2IsfCAvIeeUAAp9JLdMutGGQRVPy1DIqaMA1LCPhajiPSPH8/KSJ6mB7QFlK4otcd67aUNtq1P21Cgtis+wofjompoLp1Ef+QXOj1efTYLsSn10GdQHL8ZLxBjNY+bih6fVvOuyn9pfTawHrSXrDQp7uHstucf/y29OdmL4bVtEXwvJWmPOzru6na0HdLlH9JxGPCajblbSbcZj/tnVgXXu5t2Gyf6yUx05Qs0qPfp73m3u8T9Jn1eNvFwVvYIYLFIswvhH86ppQ0Xf987sZLwafpJXu/075JUu8WrMWLW9dfFdhb+vWrmcVvjlbxT2v0LHxWqxk+VLm8lB8Sb8gORwxhZSA8c4RRRbRrWZ6JjfJSoVr6YpSZNQvfhNQZxQtkvRb8D8UtEbJmFW2/1ohjVOE1sa78WnFbrdCcGsZp9GnIBgcte62rfSlkmIQJSU6bO9Z/VdkoLZr+JtKxboJ04Kila33M3SOmtftan/jcPzq32ow0q22pdGzr6Sbbf/kRbrin6yV1mtz8BpPm9stThzjlicsWHxnzHZPBT/fmRe/w8= -------------------------------------------------------------------------------- /UML/StateDiagram/GM.plantuml: -------------------------------------------------------------------------------- 1 | @startuml Diagram stanów GM 2 | skinparam shadowing false 3 | skinparam monochrome true 4 | hide empty description 5 | title Diagram stanu gry 6 | 7 | 8 | state "Pobieranie parametrów rozgrywki" as pro 9 | state "Oczekiwanie na Agentów" as ong 10 | 11 | 12 | state "Rozgrywka" as roz { 13 | state "Oczekiwanie" as ocz 14 | state "Obsługa wiadomości" as ow 15 | state "Pauza" as pauza 16 | 17 | [*] --> ocz 18 | ocz --> ow : Przyjęcie\nwiadomości\nod\nagenta 19 | ow --> ocz : Wysłanie\nodpowiedzi\ndo\nagenta 20 | ocz --> pauza : Zapauzowanie\nrozgrywki\nprzez\nużytkownika 21 | pauza --> ocz : Wznowienie rozgrywki\nprzez użytkownika 22 | ow --> [*] : Spełnienie warunku\nwygranej 23 | ocz --> [*] : Zakończenie gry\nprzez użytkownika 24 | pauza --> [*] : Zakończenie gry\nprzez użytkownika 25 | } 26 | 27 | state "Wyświetlenie statystyk" as ws 28 | 29 | [*] --> pro : uruchomienie gry 30 | pro : entry/ pobierz parametry 31 | pro : exit/ ustaw parametry 32 | 33 | pro -> ong : ustawienie parametrów 34 | ong --> ong : dołączenie gracza 35 | 36 | ong --> roz : Rozpoczęcie rozgrywki przez użytkownika 37 | roz --> ws 38 | ws --> [*] : Zamknięcie aplikacji 39 | 40 | @enduml 41 | -------------------------------------------------------------------------------- /UML/StateDiagram/Goal.drawio: -------------------------------------------------------------------------------- 1 | 5Vldc6IwFP01PLbDt/pYrbYzW3ed6UN3+xYxYmogTohV/PV7A0FA1Npqxba+mJxcQjz33A9QszrB8o6j2aTPRphqpj5aatatZpqG22rCl0TiFGm5rRTwORkpoxx4JCusQF2hczLCUclQMEYFmZVBj4Uh9kQJQ5yzRdlszGj5rjPk4wrw6CFaRZ/ISExStOnoOX6PiT/J7mzoamWIvKnP2TxU99NMa5x80uUAZXsp+2iCRmxRgKyuZnU4YyIdBcsOppLbjLb0ut6O1fW5OQ7FIRcsfw26V0OnHy/D6a0d9/483/++Mt10m1dE54qQp9jHIQZiUUiwZroUdm8POYx8OZpRFEarWP0mEWc84hHQqqaMiwnzWYhoN0fbCVdYnkaHWW7zwNgMQAPAFyxErDSC5oIBNBEBVas4HN1Ij8PUoyiKiJeCPUIzk/RY8iw7WVJQxObcw/uoUWJE3Mdij5299iXECGYBFhzY0TmmSJDX8jmQEqu/tssdBgPls/f4r+K+imNAdzM5hN0gpnCZ0jFQ12GU8cTW0pOPxFkolB+MppoX7JTQM75fMRd4uZ/xKkPZBVmAqARiq+kij8YMmhQCMcNOTql1OKXB0pdJ8TqKo4BeI0/0COi5zLDkhkC6eUBDTAcsIoKwENaGTAgWgAGVC+11MtnGcrbHDSW+vFbIgDkF92sWFfeuWTP5rbfSkT7myA/g5823pCa+wiswuevXkZ1OmHrsA1NPo87UkxXwoq/wi9ZxtFbbS1x1A54T6If4wj3SF8mlUN5QXDCYMRKKqLDzQAKF3KmX49dsbvQA77OHQXqCXBXrn3KEUJoVoTyjKZNKadreCm9tMzhb+TxeTMkPkY9Vh3w2Kq/h7FfPhrlrn0E8dkU7gzmIYWdJ5skzQkECRtm1iwkR+HGGEqctoHoDhlRZ9cC7mJ+msrY2qLWqhXUdjGeprEa1038up2v0HdK1c6bS+aF4szbaLcc8QwSZ1Yb256TfQ+VwbPo9KjSdioP6qBCPOim0vRef+NYvdjKN67VnPuOtzPctGlX3QKkf+77iY41q852N6n77T2pUq5lykOZJM/lqd/DBz6A/SlJOLZJq1FFMq7n6wovpAS9NQRc8/itvcW3YTgb82wRul+oU6SwuzgaYE+BWFpEUpMPkltmbq3p0WctDlWFsvlNzP1+X1eY+aSF2ZKFL6xk2HpasZt0tg2l+tTA/YXQ1Ljm6bL2GlxCN7dH1ZXpyyzxfgME0/08zdUD+x7HV/Q8= -------------------------------------------------------------------------------- /UML/StateDiagram/Piece.drawio: -------------------------------------------------------------------------------- 1 | 5VjLcpswFP0alu0Y8IMsYyduF+nEU880bXYyKKBacBlxHcBfXwmEgSrOy0ncpF4w0tHVg3MPR7IsdxYXXwRJo28QUG45g6Cw3DPLcYYnE/lUQFkDI3dYA6FgQQ3ZLbBkW6rBgUY3LKBZLxABOLK0D/qQJNTHHkaEgLwfdgO8P2tKQmoAS59wE71iAUY16jmTFv9KWRg1M9vjk7olJk2wfpMsIgHkHcg9t9yZAMC6FBczyhV3DS91v/me1t3CBE3wMR2CcJ14wfY6XGXLC0x+BN7l1aexXhuWzQvTQL6/roLACEJICD9v0amATRJQNepA1tqYC4BUgrYEf1PEUieTbBAkFGHMdWs9p5po76toKION8Ok9628kQURI8Z44Z0e4FCqFmKIoZT9BOUF2218H0ZIJd3Etq7KgiX0CyXrcW8I3eiaDdSmOVBXlaFLZtM/XDeN8BhxEFesOqp/CIUFNsu3peifupvrt+L6lAmlxP+MmQ02HRsX6M/Z0NW+/iaGGos7n0GAvTunEoHQBQcJoxqh8vnNRO48UtXtUUY+NFFyTNVizkeUN/W2dhjGX65+uhCyFqvQdtqEo8zX7TzJkj46ZIsfI0Okayzwp99qPqLbQDtV2n8I8YkiXKanIyeWGLzHCWZjIqi9ZpOJl7Oak7zb22LQbe/CWftMcRzpcXgaV1p1K8tPZB/Ad95Gq9g4UddX1VAhSdgJSYAlmnZEXCmgl8bcmmlzPnxcvC/UKWk3sXuUAmZj70nXCsm3jh3PTEh82TbHXNA8WDy0Y/tTdVflXBz8rOg1npa4cQW7HNVF370kD3oGR7g5q/46TmrvSBzq6eW90dHuWhbqTp1noA/GvZKGeaaEHWOTHlM9xLdHM0AJ6Z6H36Ix3/aV9Y2ccGbzuZTEuQnXd9jkrs5h/Jj7OmZRsn0lFD/OlkMmK8gVkDOWWJdtWgAixDOCqYUr8dVhl466rg2aMU50BVN/Ea1wovOKNgqy2t2y1TbVXle75Hw== -------------------------------------------------------------------------------- /UML/UseCaseDiagram/Agent-Agent.drawio: -------------------------------------------------------------------------------- 1 | 5VzrU6s4FP9rOrP7QYdnCx+11bsz96G77q5Xv9yJkLaxQLohXIS/fpOSUF72ooUW1RlHEkII5/zOMyeO9Kn/9ImA9fIrdqE30hT3aaTPRpqm6obJ/vCeJOuxNCXrWBDkikHbjhuUQtEph0XIhWFpIMXYo2hd7nRwEECHlvoAITguD5tjr/zWNVjAWseNA7x67y1y6VJ+xWTb/wdEi6V8szq2szs+kIPFl4RL4OK40KVfjPQpwZhmV/7TFHqceJIu2XOXz9zNF0ZgQNs8kK7SCZ2cx1dJpF7Y3jfDn309MQyxOJrILyY4ClzIH1JG+jkmdIkXOADeF4zXrFNlnY+Q0kTwCkQUs64l9T1xl62HJN/F85vGHW+cmrI5eyrenCWiVf8g8Y0hjogDd3yFBAYgC0h3jBNYhG6J54JcnyD2IVsPG0CgByj6WYYAEEha5OO2xGYXgt4voL01qdGer+xGNAMcsD/n75gdqj4oftjaB+eHrQ6KH6pSV04fiyGqogyLI9m8P4EXiTedLfjHV7nETN2aX0a+d+ZQTBixfkJCETOrX8AD9K5xiCjCARvygCnFPhvg8RvnwFktNgydYo8/x2bT55ufwhxnHlrwZylncJGTOKIeCuA09wV2solPB592klXeFWwQPow5Ee146xHoomtZcAbGSk98kE5Vl1bbBeFy87y6F7TNltAeDwrYZh3ZI20MfI4vj24IUmyhwPEi7pbK3kVpjGhVOMSwRsskJzBEKXjYDOBcW2MU0M2nmecjc8Z6gEC6w/gASYMI+Mh1+fNtxKfO1J3gqolH7mSLJZf82CaxUU51dSIY3ZqPYrZrTovCEDyfh5DWGJ2/dA9hGr+G9y9i/VsTzsmwhLPGnxkeTc2RpY2mxsgynRQGCPIYE/M14XRBkniF6r6D57GokQtLvEQU3qzBhlgxC1zL1O7CYmhlk6EZdZORjynaDKsvm1FH+W0SZmQEGflSsE4ouwbsGmfkfGNUzttHo/KkRuUrFz4QQWEUzDHxgfOIBIkFGRmFNPY+xYsexA3skjRiWh9FZcYckdi5OyOJfUhIe1Ptzz+DHw8/rm++6rfJ/ecw/XFi9G+0h6K5Zaj8a7/KOpbutq8XJ/PZ5/heR/787/900/HvGiKGzlnUR0h4aK6ZxqAsrlx3yViwSA8SHAtVtsIefAzgI3/9KlNoATcca+yGFMSbMSElgMIFOq6RqOot/ZBGolEo7J0Y3sL1YtvbRZbDPeP58K2UsJ5LxFe+bzaj81iuEgMIRhqVMFwzlVOl+DMuz5hJnZik+7hBrXtUV+4axwi4QkY2AiGNNxSWPU58BALuU9l2xSU4opAYesW4my2FpIscR6OQ7E6Ovz0h6TymaickxqTCoL6lou4BX2MShakQgRBJ6A8I7aZ6bLSP3xnaO/dCW6JdOTDarQYbkEXNm+D5fCqC5jkBC5+RMRoU7o22IVxvuK8nst827u3j4F6vMqhv3Ns13N8mK8aEDO0yIsDuiiTOkfMWVdDrDbs3hwW99b5AL2l3cNBrhwW9fF0B9DdrAmI3HbSS19rGu73hffc2fm94F7v6eaPdrn5BTh487KxqggKfEP1euC5My1rbWXlj/1KBvOjt8MU0m0cZLUBSGCD2KF8spJcvtGRbvGUr6FaS62nJ+0KYjoIALnisDnh1w7Csl2YfUJqbtzh2m69eUrC5zOVydle407XMyWzsr5Ptnbt7+3Gm7pV92CoGidIuqhgMXZbJyrgpa+3pz4xLc55UJ+iv4sGsb5xduVv1F0ISQyJ3gWPGPRc4j3nGUjj3R9SJ1Yy+aRinZjut2NvGr6XWSTLcjSm5S/jWNJxV35japeGYrmK+2/tUcNZzYvNiBXeinKqWoZa1kbqfiutfiY2bUm9OCldCizkpCKMNMbDn4jg4qsaqFqoMQWON695CsVYFb/ayoJseucTHKlNuorT0f/sr8dmdq++sKv0VYWZH1kEmyN6adZjU954+qnWQIO3EOuiKVZLBPW2DnFjVpQ4su9X9245JPZN3HyaBsyQ4QGle47Ldq1RS8Zv5xtBnl7/FnBEkTdbAXXFL87Atl7Rtl/esSEITJ+XZhN+PqkXzfTFB6bHeoEXHDVpUrW6odefK7a6CeQdq1HqjaQS7Lh0fVY1KkHajRlW1rO+60qNGRY+e5B39q1Krnku4BysaMW4VFCkFAdeHHl4BLysa9ME6GZRKnDTthTepxN4cS3n88hmHvFqen1eODaCgphrfWIesDb+6mN39Re9PqH317dJ3/wUXV/+8sPD4NTpswHtYDQasYlteZ9HstvXM9nEN2K/Ll3l1Qlw5/zKQiFc3jihLzxxD1g7qq8nrNr7aaw9vd1Xhr7SNlVVlaKfrX5ZLfde7RTnCO3H0tPF4UnbIBp9NzXHc9uRaClbZ8UBjczCQe3fDPBNoN4W6B1afdWfkNmk8WzmEggPjiPRrPOZXP2fxy/86cUmAfxhyVdLTakN62myill0tXmtBLtbc/ruoTPK3/3RLv/gf -------------------------------------------------------------------------------- /UML/UseCaseDiagram/GM-GM.drawio: -------------------------------------------------------------------------------- 1 | 7VzbcqM4EP0aHjNlrrYfnctkayuzyU6qdnbykpJBxtiAWBBj469fCSRush2SECNvNg8pSwgjne4+anU3VvSrYHsbg2j5DTnQV7SRs1X0a0XTxtaU/KcdWdGhWuqo6HFjz2F9Vcejt4Oskw9LPQcmjYEYIR97UbPTRmEIbdzoA3GMNs1hC+Q3nxoBFwodjzbwxd4fnoOXRe9EG1f9v0HPXfInq3zFAeCD2UqSJXDQptal3yj6VYwQLj4F2yvoU/A4LsV9Xw9cLScWwxB3ueHu+Xf9ebN6eL6ZPNzd+88z+/aPCzbZBGd8wdAh62dNFOMlclEI/Juq9zJGaehA+q0j0qrG3CEUkU6VdK4gxhkTJkgxIl1LHPjsKplwnP3N7s8bP2nji8mb19v6xeuMtcQVMxASlMY2PLJMrjkgdiE+Mm5SjKMY1B7A8LyFKIBkPmRADH2AvV9NHQFM1dxyXCUN8oEJ5BXCUc2j0iEoeDj7nk8FhXJL6EXkub33Bz279QF5ZC7aiDGSNmUPYoTEm/wbClViN7XkV87iHSK1BJHKJ6zezElV5bKn8acCX5MK/HIb/Bzg60OBP73L7v4Msl146a8c9P369q+n1YX+Edg7M+pfkWaIQlj0fPXovPrBeOidoJDxx+0ExdN+AT9lK7j9JkiJ+IwR/ZgG/szGKCa4/oIx9oh/egfm0H9AiUc3fzJkjjBGARng0wuXwF67uYyvkE/vI9+mL/K/2nfMfM+l92Iq87pwDwqP3gm3R8WybcLJ0NUt1t5UXrTOupY1B9oaHZbju/jH0AXAFc0CAV25j/M111teaPupA8tOtzGEtY44Z8wmeqS4itV+1q8doDgHJMv8uUfF+aItTjrynS6X52yK1vVuYVv50HlMPp1O/CcWozGVS4zmW8SYDG60p5aaXMY3EYR2P0+UK1OZaKkLyJUdiDIM8h6DNGcuReZKVy71jSge3/eihEpls/QwfIxADtkmBv1vWeXmw/csU9yzVG3PpjX5qE2Ln4oPYxnFiDanl3O6EERDbai4rlwZysS0dzD04KCwmmYT1sFR1V9HK3CLiWv7n2EVXe9IK/2HZN4nNdGBu3fiXWoXCt60hAHV3Wp5vurw+m6dpb4fcn0rZ/dDXV99uNDl+6Qt+r5PAKxtGGG0AXLZSntruJgMbSuW6L18JpdT7ar01lgqpVdFpX+IIfF9Kp1PMAhTCosPwmRHp+ZRRctCb50OagRtt9PaEyo5sRGM96C5g/YSbTLp4TTUlrs5+P5raZ+bU7SunCJXumj8Orfp84pNrqCRKlrbE1gXh2KDH4dHMdq5cbZZe1JR/3h4/0fcSH9kLOLAmN8LFygOgL3yWMRh14Q3LYIQEgV2TF02mLU3bQmvohZpeKRrvEGTi/41Y4+IPhRjuPVw7bxLWj9rV6rTLm3ww+5bD8mnkOdgOfD952IxlsqTOkkEwoZgrX9SWpZ3uUAhvkhy4c3IAFWNttXFKhHUS2aJLKqYx4H0EuE63FSeGJKpgXk+gMo0ornqHDbzUjGvSQ9gCV6bSBnWs8c88xt4jpOXjHXIGosqc9xu2vRcFmmyKSv1Osh9tH0x+qKOzQZz87T5W3P/fAhaLBL4IXl9TTw79U8bnCn451rZSwemUF5VLHPybcDqmzb213/o41bsqQzUnqgCRJv+T0gnISRuke8mpNGX0ZjXkWSNL5KXj1QxbfId7SJk72iCcDq1ZToOaYdMcjhHXQwCvHgeipv4DhwOG8mHqaiSD2ge89wEiAF9TnlwlFU59cFx3FNDCEMYE1WkpQEh2sCVUovQShSUHR48XUz0PEYx2Dg8QsRD2axcJfTAsOrXChVpgyNo7PN05U8r9+TPGgzWcyuNNMRjcFPvEwxwmuSpHeTnPAIkIRFzIp0JnGdlRV8m0DVZLJsJiPtm0wQW3trOViGrkbCpX7eIgRsQhAZ25loWoBqDW8B51tINXFtkaGdqOZog7fu575VZNUTO7m5xOKobD3LIvzXYFDW/2louT6o0mMGMaPy6d1NkMaK+jKFrnXvn10lr8WOV3yRvhMYQTyJPgQdyt6tyxgJyCpHKbIzp0GZjTs5JzU2ro5pL9jqHuTdM3Ss5nUskmStcL6kt3ZxYDYOSP7dlised2RqnRBQ7FnOK0nCNi1DogFRl6bJRlSEaUTuMLFm8yWjT/eCHbVN8i11muu8aH5KM7fdVvXxStudeeR9sr03HmvT0LoYG83xCWUJPMwoukuks1w4JDv/K5vjjDUhi1uO1wOf200DWvv25iGBsPIj96qUHnBFJrIdV+pZ7Y51S6ff+voyo87cgoIB9Awnl6zZatd81+UqzvS/Dxpc2pfpdrkk/WsrYHVG15exclHVnNUjL93LqkKqjdtVQB1BJs/rdv4K9q19P1G/+BQ== -------------------------------------------------------------------------------- /UML/UseCaseDiagram/USER-Agent.drawio: -------------------------------------------------------------------------------- 1 | 7Vldb5swFP01PFYCk6TkMWHttqqTKkVttL1MLjjgxNjMmJD0188mJiGYVOnHQjSlL8HH18Y+5/pwoZbrJ6uvHKbxDxYiYgE7XFnuFwsAZ9jz5I9C1hrxHLBBIo5Dje2ACX5BGrQ1muMQZXuBgjEicLoPBoxSFIg9DHLOiv2wGSP7d01hhAxgEkBiolMciniDeuB6h39DOIqrOzuD4aYngVWw3kkWw5AVNci9sVyfMyY2V8nKR0SxV/GyGXd7oHe7MI6oOGbAAKXgIX2afwdT927qgPDuz9OVniUT62rDnOU0RGqMbbljxkXMIkYhuWcslaAjwTkSYq2lgrlgEopFQnTvZkYUGrzuFlrdleU80FHpT+DPfj9NEWVX+Gd0k4nisVqdgDxC4pW46y2dMhERS5DgazmOIwIFXu6vA+qEiLZxO87khabtDRSC/4LC3okofG2RS0hyfadHy+9bY38tFqygeGFQLA9Tqi7zhIwCwbgkbYm4wPLg3sNnRB5YhgVmVIY8MyFYIgOI6hjDYBGVAvmMqHFyNndW/tXmGBEcqbFCCVZXhuWCYIr8rdvYW7la1FHToVUNMgmuerVJaJsErm4XO8+poLhmNwP7HyX1wFDEAgOYKDaIKLdcb2EakFzZdIVGezG61ZBQpfdENymj8mf84YMTwiwux3/yKeodeYoGXZ6inqHZdK2OkQcsv2d5/eBF3TWSm4emGITIJ6rSoIixQJMUlnwU8qneZk0fy/VGsrstye6Almz3PiHbD8vWwtxwTPBcDaYzxhMYzBWRQ/mAt5laboNdRHFeY9gOVVCGeIF4t4S7oEF474SEt9qLe7EXo345wl6cAzqfptAx/eUi2jGiuV2K1r+I9i7RvC5F8y6ivUe0YZfV17Wh2S+IKQ7m+fw8yy7H7rrsGhqUPYrC8l1r7HJVq2K1ZXawhLVftvUVSs6K2qvOK1rHfKWeppwVMCxfrEebHcNqH02WZSl7VgQ3K1jQOb+tFWxpxyFeysvSdZuUhzzX3zXo9k2ifEtYCJ32SJkFVV8fN3HVpHKRtXnPSgvH61wM83k5XT9jVJpIJjgUKMIV4WdkE8Dpn4651kLDdOCRMleDpdrntlvlGsfSZXDTwuBBuryGqQ7MPOu1sdW3306XbO6+xJd9tX9ouDd/AQ== -------------------------------------------------------------------------------- /UML/UseCaseDiagram/USER-GM.drawio: -------------------------------------------------------------------------------- 1 | 5Vpbk6o4EP41PM4pJIDyqM5la3emdmqtU+fycioDEaMxYUMYlF+/CQQFYdWp44Up52XsphPSX3e+7gAGGC9XTxxGsxcWIGJYZrAywL1hWT3b7ct/SrMuNKBUhBwH2mirmOAMaaWptQkOUFwzFIwRgaO60meUIl/UdJBzltbNpozU7xrBEDUUEx+SpvYbDsSs0A6s/lb/B8LhrLxzz/WKK0tYGmtP4hkMWFpRgQcDjDljovi1XI0RUeCVuBTjHv/n6mZhHFFxzIDsUYxe/527YZol/Wf6vPhzsbjruXpxYl16zFlCA6QGmQYYMS5mLGQUkmfGIqnsSeUcCbHWsYKJYFI1E0uir8r18PV3PT4Xfijhi1OK96vqxfu1lpoOaR9jlnAf7fNCJwbkIRL77KzCEAW1oGu8nhBbIrkgacARgQK/13MA6lQKN3ZbtOUPDfgHwLcGNwX+oFPgA/OmwPc6Bb7duyXwLbtb4Fu3BD7oFufred8hSfSdvhpjxxiN12LBUooXjdjIviFSP5MlGfqCcYnaO+ICyx7lGb4h8spiLDCj0uSNCcGW0oCoCyPoL8I8smNG1Dg5G5jmf5U5hgSHaqxQka6GlCWCYIrGm8Zqb7zUdGi1F+DyqibesiG0tZxu26uSm2eVzso1z1WF+42QGJYLlwoOInKfqxKmPklUS1pqw5qNlk69vwIYz/Lxvd/bNNax9aLfrV1jNWL0E2KK/Xkyl+qnlwbiclJ5RJDCKJ1hgSYRzIFJ5SmljuwpMtqqp3Sv30zpjU01p+1z5XSvmdPfInkYgkFONsPCY1j6ETGlHljG2DYGji9zUIn2VUG1zR1Q3RZQ24jCOQWo5q9fP6Ovfy2mq+Hdw9+cDL/DO6uZhPuIAq0EosHHeEJtt4kWKaMK6ROW5m01/lErxu2luUY50pOhOk1L0ScwjrFfKB8xORjzw6w0+JxdbLnuSkJMFoxOcZjwnJeqe4yzLOTrdIE7RVVW265qo6qTlN/WXeWev/yeY1tdcHt4R26PcsYrbI/WyF6gsbqVyJrdIj6vEdl/WBYxP6N4XuE61U94XqcIDxzbm4HBmcArb1btzdaq4fJGJEcP0ynjS+jPkRRYAafCtkDTx0mn+rLWCtLWl52t2bVaztQiNcbAGAGeKX8JpHFWJqOJWzLUpDDvg4NYwBSjSu0u5kmvijnwdpLY8ZqY25c8NNvO+bn9ag+lTnTYLh/7HWZ350h21+lgfjHNvlPLCL2mo+lfz/3KsPRqa8Km01gudTc7Nkv4jYS5QJt3OwnjdqodKNfdUtEklwrSoOAO9QO2c/V+oEmlr+wNo7x0yXJEN/CtO1WEWpFrK0LnQ67JKTXkxFpCdeUD9y5qDrg2ajb4BEx8IkYtX/4cfksEOsWodpNRuxejK1fL42Pbrdev5bpr7zIWxRN428+6fXx2Wt7WXbZcgiZ9HTg+ZxV0Eb3y8XkXUPfqgDq3VA8+aYcNDnfYHe13WvP7bP1O62PoZn4/waUihxcYC8QbcFU+uHhUz4AO41b65qns3jgFTvTBxGDnRWgLona/BVHHcT4MqRS3X6QWZ//td73g4T8= -------------------------------------------------------------------------------- /UML/UseCaseDiagram/USER-SERVER.drawio: -------------------------------------------------------------------------------- 1 | 7VjbcpswEP0aHpPh6uDHGCdpO2nHM26a5FEGGRQL5ArZQL6+khE3gWsnk4s7U7+gXVYLOnt0tEazvDi/oWAdfScBxJqpB7lmTTXTNMa2yy/CU5SekW2VjpCiQAY1jjl6htKpS+8GBTDtBDJCMEPrrtMnSQJ91vEBSknWDVsS3H3qGoSw55j7APe99yhgUel1zYvG/wWiMKqebIzG5Z0YVMFyJWkEApK1XNaVZnmUEFaO4tyDWIBX4VLOu95zt34xChN2zISnwnj4uoinv02Kb5ej/G6Wu2ejMssW4I1csGaOMM83CdCWD0MxvNM8R5t4BVuRLEGrKoI/qhUkF8mKCjm+3rUYbmJ86TNCecwWUoY4trdgAfGMpIghkvCQBWGMxDwAixsT4K9CSjZJ4BEs5vFs1nL3a+W4xCgUcxlZc2/EYswNgw/JhmGUQK8mhF6/XRssiZ9IB/OWS4J3A0kMGS14SN5lpCSypUs7a2hhSVfUYsRI+oAkYlgnbmrFB7JcLyidO1A6pQQwCS7FHuCWj0GaIr8LFQeDFg8Sop3xKIxzpzKnefvmtDiEZko21IeH+cYADSH7S1wFNgw627NfnBb6zgD6lY9CDBjadjf1UEnkE2YE8aXVtbeV2ptKUct1y0ntPajkUROZupKoBKaXaEeQetWv58z4BDlzmAvGIBeOZdupcEYVgtdyxrY/ljPVVmyR5l4cCK6pebbmOv6zKAWkGaR9MmHMD2puTLIIMThfg129Mt4rdFn1FvpsKntr3BfoOqZdb/e9FLoibhu54l+AzjY+HTrzmMaEX0Es4MB9C+aMS1laO7sTKuuYRuagIuaI1YLIxy095FYjh8Ko1DAAaQSDQxU8KHCG89bnqWSEfq6bY6dDCqNHiXcUT0dXNvNr1dNWVUFNtEc9m0RVIFkuU/g+Cmv/J/sxZH/z5rEhuzV2uzT5SLLbrtIqqLJ6LNnrHmNfn3oKZHd6ZL9LGcgEKQhlxacehJaqFtanH4T9f+gVXBjFiO1g6/YUcGfaJwWk5XwgkBGeLC9W5o+fvyJj9m3+VDxee2f9Xmw+3Hi1vltcUxAfjVcPnAEI9+KlKIA50IDZ+gBcdZP7Ary42Xx1Krd18+3OuvoD -------------------------------------------------------------------------------- /UML/diagramSystemu.drawio: -------------------------------------------------------------------------------- 1 | 7VjbcpswEP0aHt3BYLD96FuSXtLJjDu9vXQUI0CpQFQWNvTrK6GVATt27E4Tjyd9MezRrqTdPTryYLmTpLjmKItvWYCp5dhBYblTy3Gc7sCXD4WUGhm4PQ1EnAQa6tbAnPzGANqA5iTAy5ajYIwKkrXBBUtTvBAtDHHO1m23kNH2qhmK8A4wXyC6i34hgYghC6df4zeYRLFZuesP9UiCjDNksoxRwNYNyJ1Z7oQzJvRbUkwwVcUzddFxV3tGNxvjOBXHBKTv0Op7nGcfvR+l3X/7ed2PJh1T5qUoTcY4kAUAk3ERs4iliM5qdMxZngZYTWtLq/b5wFgmwa4EH7AQJXQT5YJJKBYJhVG9plpoby4ALVnOF/hAAsAmgXiExQE/b1NxSVXMEix4KeM4pkiQVXsfCDgTbfwgdMQ5KhsOGSOpWDZmvlOAdAD6dz0ob2lIvdWi0/zli96BsRqp1FDV9hMoABVcIZpDGSzHp7KW46xFDP9Xrqg6TmSpSWq5IzlqZ4X8rTpqa7wjFAfUWK8xJnAhOoiSCOIWss+Y13PKtwie1cr3fAcxwPWtgWS299tuEstqbIvZK8wFkUd7pDcyrbY6hm1NKQ5VFJNeIa0OakhUJcchSwVQueuAfYUSQlWXbjBdYTXrYwxXC+LiMMd3OQkBHadNhh6Y61qGDD/suCFBA3s/ixtMOp0ogwuXCu9IqfDPIRXO8DSpeML/eaRiuCMVnyZ352CF7D0vvzaNb2qyN45n7GkBs2urBOsMdOo9Tifomznkz3wR+W22+E/cQwfd29yqg81mWBguZUW25eYf8M+7rKtqjvm6Cj3yujp7KgZ4z5I8JT/RonxIy1dy3W5z/uzXbf+/2G7dyX//N/9Fxda1TxLbw+7nE1v/ssR2FClSvQ6tcnsvplXSrD9RaGrVH3rc2R8= --------------------------------------------------------------------------------