Changeset 3
Author: Toster
(2009/02/15 16:00) About 3 years ago
- poprawiono metody skoków (j***) teraz wyznaczaja poprawnie adress docelowy - zmiany w dzialaniu polecen sub, div teraz odpowiednio dst = dst - src i dst = dst / src wczesniej bylo na odwrot - rozszerzono kompilator: dodano sekcje Code, Data, Binary w kodzie zrodlowym - rozszerzono kompilator: rozne sekcje moga byc defaultowo ladowane pod rozne adresy w debugerze - pojawila sie dokumentacja w formacie LateX'a - rozszerzono loader plikow skompilowanych - pojawila sie konfigurowalna maszyna virtualna - wyseparowane podstawowe interfejsy/klasy bazowe dla urzadzenia dzialajacego jak zegar i manager pamieci
<VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="AutoIncBuild">True</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MajorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Release">3</VersionInfo><VersionInfo Name="Build">50</VersionInfo><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="FileVersion">0.0.3.50</VersionInfoKeys>SouthBridge in '..\Units\SouthBridge.pas';SouthBridge in '..\Units\SouthBridge.pas',Linker in '..\Units\Linker.pas',VirtualMachine in '..\Units\VirtualMachine.pas',XMLHelpers in '..\Units\XMLHelpers.pas',XMLShader in '..\Units\XMLShader.pas',CoreDevices in '..\Units\CoreDevices.pas',SimpleGPU in '..\Units\SimpleGPU.pas',GPUOutputForm in 'GPUOutputForm.pas' {GPUOutput};{$R *.res}{$R *.res}'Interrupt'Compiler, VirtualMachine, SimpleGPU;{ Private declarations }{ Private declarations }fProcessor: TProcessor;fVM: TVirtualMachine;fMemory: TMemMgr;fClock: TClock;constructor Create(const proc: TProcessor; const Clock: TClock);constructor Create(const proc: TProcessor; const VM: TVirtualMachine);fClock: TClock;fVM: TVirtualMachine;// fDissStart: integer;// fDissEnd: integer;{$R *.dfm}{$R *.dfm}{ TRegisterInspector }{ TRegisterInspector }fil: TFileStream;EndOfSections: TStrings;b: byte;fil := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);EndOfSections := TStringList.Create;for t := 0 to fil.Size-1 do beginfVM.LoadExecutable(OpenDialog1.FileName, EndOfSections);fil.Read(b, 1);fMemory.DebugHeapAccessor[t] := b;end;fBreakPoinMgr.AddBreakpoint(fil.Size);for t := 0 to EndOfSections.Count-1 dofBreakPoinMgr.AddBreakpoint( StrToInt(EndOfSections[t]) );FreeAndNil(fil);FreeAndNil(EndOfSections);fProcessor.Reset;fVM.Processor.Reset;//tworzymy procesorfProcessor := TProcessor.Create;fProcessor.AddCore( TSimpleCore.Create );fMemory := TMemMgr.Create(1024*1024, 50*1024, 50*1024);fProcessor.MemoryMgr := fMemory;fClock := TClock.Create;fClock.AddTickReciever(fMemory.ClockSynchronizer);fClock.AddTickReciever(fProcessor.ClockSynchronizer);//podlaczamy nasze bebechy//petla budujaca maszyne wirtualna, jak nie uda sie to nie jedziemy dalejVMFilename := 'VMachine.xml';repeatif FileExists(VMFilename) = false then beginShowMessage('Can''t find default VM configuration (VMachine.xml), '+'please select different one.');if OpenDialog1.Execute = false then Halt(0);VMFilename := OpenDialog1.FileName;continue;end;fVM := TVirtualMachine.Create;//----------- resejstrujemy klasy dla rdzenifVM.RegisterProcessorClass(TSimpleCore);//----------- rejestrujemy klasy dla urzadzen mostka poludniowegofVm.RegisterSouthBridgeDevClass(TSimpleGPU);//------------------------------------------tryfVM.BuildVM(VMFilename);excepton e: Exception do beginShowMessage('Error while building VM:'#13#10+e.Message+#13#10+'Please select different VM configuration');FreeAndNil(fVM);if OpenDialog1.Execute = false then Halt(0);VMFilename := OpenDialog1.FileName;end;end;until fVM <> nil;part := fVM.FindVMPart('GPU');if part <> nil thenfGPU := TSimpleGPU(part.RefObj);//podlaczamy bebechy debugeraTSimpleCore(fVM.Processor.Core[0]));fMemInsp := TMemoryInspector.Create(ListBox3, fVM.Memory);TSimpleCore(fVM.Processor.Core[0]));fMemDiss := TMemDisassemble.Create(ListBox1, fVM.Memory,TSimpleCore(fVM.Processor.Core[0]));fExecutor := TCodeExecutor.Create(fProcessor, fClock);fExecutor := TCodeExecutor.Create(fVM.Processor, fVM);FreeAndNil(fProcessor);FreeAndNil(fVM);FreeAndNil(fMemory);FreeAndNil(fRegInsp);FreeAndNil(fClock);FreeAndNil(fMemInsp);FreeAndNil(fRegInsp);FreeAndNil(fStatRegInsp);FreeAndNil(fMemInsp);FreeAndNil(fMemDiss);FreeAndNil(fStatRegInsp);FreeAndNil(fBreakPoinMgr);FreeAndNil(fMemDiss);FreeAndNil(fExecutor);FreeAndNil(fBreakPoinMgr);FreeAndNil(fExecutor);s := InputBox('Goto address', 'Enter address to dump',s := InputBox('Goto address', 'Enter address to dump','$' + IntToHex(fVM.Processor.Core[0].ProgramCount, 8));s := InputBox('Address', 'Enter new program counter value',s := InputBox('Address', 'Enter new program counter value','$'+IntToHex(fVM.Processor.Core[0].ProgramCount, 8) );StatusBar1.Panels[0].Text := '$' + IntToHex(fProcessor.Core[0].ProgramCount, 8);//GPU jesli jestif fGPU <> nil then beginfGPU.RequestImage(GPUOutput.Buffer);GPUOutput.Refresh;end;StatusBar1.Panels[0].Text := '$' + IntToHex(fVM.Processor.Core[0].ProgramCount, 8);{ TMemoryInspector }{ TMemoryInspector }c: array[0..6] of TControlBits = (cbZero, cbNegative, cbOverflown,c: array[0..5] of TControlBits = (cbZero, cbNegative, cbOverflown,cbInterrupt, cbDebug, cbPanic, cbIrq);c: array[0..6] of TControlBits = (cbZero, cbNegative, cbOverflown,c: array[0..5] of TControlBits = (cbZero, cbNegative, cbOverflown,cbInterrupt, cbDebug, cbPanic, cbIrq);{ TCodeExecutor }{ TCodeExecutor }constructor TCodeExecutor.Create(const proc: TProcessor; const Clock: TClock);constructor TCodeExecutor.Create(const proc: TProcessor; const VM: TVirtualMachine);fClock := clock;fVM := VM;fClock.Tick;fVM.Tick;fClock.Tick;fVM.Tick;<Parameters Name="RunParams">stack_test.txt stack_test.gcf</Parameters><Parameters Name="RunParams">data_sec_test.txt data_sec_test.gcf -debugDump</Parameters>SouthBridge in '..\Units\SouthBridge.pas';SouthBridge in '..\Units\SouthBridge.pas',Linker in '..\Units\Linker.pas',Preprocessor in '..\Units\Preprocessor.pas',DataCompiler in '..\Units\DataCompiler.pas',CoreDevices in '..\Units\CoreDevices.pas';t: integer;str: TStringStream;e: TEntity;outFile: TFileStream;lChunk: TLinkerChunk;inStr: TStrings;messages.add('Parser:');messages.add(' Done.');deb.Add( Format('%s: %s, %d', [EntityTypeToStr(e.fType), e.fSArg,messages.add('Compiler:');messages.add(' Done.');deb.SaveToFile('debugDump_sec_'+IntToStr(SecNr)+'.txt')deb.SaveToFile('debugDump_'+sec.Name+'.txt');messages.add('Parser:');messages.add(' Done.');messages.add('Compiler:');messages.add(' Done.');2..100: beginWriteln('Usage:');Writeln('Usage:');Writeln(' GluCompile.exe srcFilename [dstFilename]');Writeln(' GluCompile.exe srcFilename [dstFilename] [params]');Writeln('Params:');Writeln(' -debugDump - dump into files compiler verbose informations.');Writeln('Input file not exists:', srcFileName);Writeln('Input file not exists:'+ srcFileName);Writeln('GluCompile by The Tosters (http://thetosters.pl)');Writeln(' Preprocessor ver:' + PrepVer);Writeln(' Entitier ver:' + EntVer);Writeln(' Compiler ver:' + compVer);Writeln(' Linker ver:' + linkerVer);Writeln('Loading file:'+ srcFileName);ReportMemoryLeaksOnShutDown := DebugHook <> 0;inStr := TStringList.Create;inStr.LoadFromFile(srcFileName);Writeln('Loading file:', srcFileName);deb := TStringList.Create;str := TStringStream.Create('');str.WriteString(inStr.Text);str.Seek(0, soFromBeginning);inputStream := TFileStream.Create(srcFileName, fmOpenRead);en := TEntitier.Create;messages := TStringList.Create;en.Parse(str);//jedzie preprocesorWriteln('Parser:');prep := TPreprocessor.Create(inputStream, messages);for t := 0 to en.Errors.Count-1 doprep.Parse;Writeln(en.Errors[t]);ShowAndCleanMessages(messages);Writeln(' Done.');linker := TLinker.Create;for t := 0 to en.Entities.Count-1 do beginfor t := 0 to prep.Count-1 do begine := En.Entities[t];case prep.SectionType[t] ofdeb.Add( Format('%s: %s, %d', [EntityTypeToStr(e.fType), e.fSArg, e.fIArg]));pstUnknown: writeln(t+1, ': Unknown section type, skipping');pstCode: BuildCodeSection( t, prep.Section[t], messages, linker );pstData: BuildDataSection( t, prep.Section[t], messages, linker );pstBinary: BuildBinarySection( t, prep.Section[t], messages, linker );end;ShowAndCleanMessages(messages);comp := TGluCompiler.Create(en, deb);//jedzie linkeroutFile := TFileStream.Create(dstFileName, fmCreate);linker.WriteToFile(dstFileName, messages);comp.Compile(outFile);ShowAndCleanMessages(messages);Writeln('Compiler:');for t := 0 to comp.Errors.Count-1 doWriteln(comp.Errors[t]);Writeln(' Done.');Writeln('Writting output file:', dstFileName);deb.SaveToFile('debugDump.txt');if outFile <> nil then FreeAndNil(outFile);if linker <> nil then FreeAndNil(linker);if comp <> nil then FreeAndNil(comp);FreeAndNil(prep);FreeAndNil(str);FreeAndNil(messages);FreeAndNil(en);FreeAndNil(inputStream);FreeAndNil(deb);FreeAndNil(inStr);<XPD:ATTR name="#Subvertices" type="integer">17</XPD:ATTR><XPD:ATTR name="#Subvertices" type="integer">24</XPD:ATTR><XPD:ATTR name="#Outgoings" type="integer">1</XPD:ATTR><XPD:ATTR name="#Views" type="integer">2</XPD:ATTR><XPD:REF name="Views[0]">s3si5zO8lkyG/LL9HQ6rvAAA</XPD:REF><XPD:REF name="Views[1]">aX453XE6U0u7xke7XQrcRAAA</XPD:REF><XPD:ATTR name="#Outgoings" type="integer">3</XPD:ATTR><XPD:ATTR name="#Incomings" type="integer">5</XPD:ATTR><XPD:ATTR name="#Incomings" type="integer">6</XPD:ATTR><XPD:ATTR name="#Outgoings" type="integer">7</XPD:ATTR><XPD:ATTR name="#Outgoings" type="integer">8</XPD:ATTR><XPD:ATTR name="#Incomings" type="integer">6</XPD:ATTR><XPD:REF name="Outgoings[7]">Ys2kkLaDDU2pjMeeiHnQSwAA</XPD:REF><XPD:ATTR name="#Incomings" type="integer">7</XPD:ATTR><XPD:ATTR name="#Outgoings" type="integer">8</XPD:ATTR><XPD:ATTR name="#Outgoings" type="integer">9</XPD:ATTR><XPD:ATTR name="#Incomings" type="integer">6</XPD:ATTR><XPD:REF name="Outgoings[8]">s2eB4srbM0CyGGbVNivu9gAA</XPD:REF><XPD:ATTR name="#Incomings" type="integer">7</XPD:ATTR><XPD:ATTR name="#Outgoings" type="integer">8</XPD:ATTR><XPD:ATTR name="#Outgoings" type="integer">9</XPD:ATTR><XPD:ATTR name="#Incomings" type="integer">6</XPD:ATTR><XPD:REF name="Outgoings[8]">YwhBOn43Aki7+xlRJw9siAAA</XPD:REF><XPD:ATTR name="#Incomings" type="integer">7</XPD:ATTR><XPD:ATTR name="#Views" type="integer">6</XPD:ATTR><XPD:ATTR name="#Views" type="integer">8</XPD:ATTR><XPD:ATTR name="#Outgoings" type="integer">6</XPD:ATTR><XPD:REF name="Views[6]">JgA/DAP2F0GVl2dsrHdeagAA</XPD:REF><XPD:REF name="Views[7]">O95WvPIeHkidMOC5cAUMDAAA</XPD:REF><XPD:ATTR name="#Outgoings" type="integer">7</XPD:ATTR><XPD:ATTR name="#Incomings" type="integer">6</XPD:ATTR><XPD:REF name="Outgoings[6]">iJE+Bm7PdUS9+g0y/aJylwAA</XPD:REF><XPD:ATTR name="#Incomings" type="integer">7</XPD:ATTR><XPD:REF name="Incomings[3]">sfoFVM5JvkeAyZYCgPvDWgAA</XPD:REF><XPD:REF name="Incomings[3]">MtSg6/9QCUKlfHTl00PL+gAA</XPD:REF><XPD:REF name="Incomings[4]">MtSg6/9QCUKlfHTl00PL+gAA</XPD:REF><XPD:REF name="Incomings[4]">EniTot2Sa0mZI9OyIwn9mQAA</XPD:REF><XPD:REF name="Incomings[5]">EniTot2Sa0mZI9OyIwn9mQAA</XPD:REF><XPD:REF name="Incomings[5]">sfoFVM5JvkeAyZYCgPvDWgAA</XPD:REF><XPD:REF name="Incomings[6]">imnaqLb3Rkm/zshfu5XyXAAA</XPD:REF><XPD:ATTR name="#Views" type="integer">2</XPD:ATTR><XPD:ATTR name="#Views" type="integer">4</XPD:ATTR><XPD:ATTR name="#Outgoings" type="integer">7</XPD:ATTR><XPD:REF name="Views[2]">h2IXtTKJt0O8PLdMNS+rqgAA</XPD:REF><XPD:REF name="Views[3]">fNXR2fJnnkSZmpso6SExfAAA</XPD:REF><XPD:ATTR name="#Outgoings" type="integer">9</XPD:ATTR><XPD:ATTR name="#Incomings" type="integer">12</XPD:ATTR><XPD:REF name="Outgoings[7]">+1bmDZVYmEqwCKzuIaDgBwAA</XPD:REF><XPD:REF name="Outgoings[8]">T6hTYD4uRkm8gA3bCpEbBQAA</XPD:REF><XPD:ATTR name="#Incomings" type="integer">13</XPD:ATTR><XPD:ATTR name="#OwnedDiagrams" type="integer">3</XPD:ATTR><XPD:OBJ name="Subvertices[18]" type="UMLCompositeState" guid="pha8f7KtxEiBBp48XDe5PwAA"><XPD:ATTR name="Name" type="string">db command</XPD:ATTR><XPD:REF name="ContainerState">sk7l+sINMUe6Qd2pRaeKrwAA</XPD:REF><XPD:ATTR name="#Views" type="integer">2</XPD:ATTR><XPD:REF name="Views[0]">9tDDuDtPCEiYD7L/8RTulAAA</XPD:REF><XPD:REF name="Views[1]">uyqiRv3yjEyxhT8p84Zo+QAA</XPD:REF><XPD:ATTR name="#Outgoings" type="integer">2</XPD:ATTR><XPD:REF name="Outgoings[0]">+Qh6MRFplkWFge2bkRctzwAA</XPD:REF><XPD:REF name="Outgoings[1]">HoPF+SDDGEasrduotWR5ngAA</XPD:REF><XPD:ATTR name="#Incomings" type="integer">1</XPD:ATTR><XPD:REF name="Incomings[0]">jIdeb32uq0q364D04nIZ7gAA</XPD:REF></XPD:OBJ><XPD:OBJ name="Subvertices[19]" type="UMLCompositeState" guid="y2W8lwp6GkOeGT+gGo1vQgAA"><XPD:ATTR name="Name" type="string">dbt command</XPD:ATTR><XPD:REF name="ContainerState">sk7l+sINMUe6Qd2pRaeKrwAA</XPD:REF><XPD:ATTR name="#Views" type="integer">2</XPD:ATTR><XPD:REF name="Views[0]">2vR7EDOYLk2Vw/wKZXhaiwAA</XPD:REF><XPD:REF name="Views[1]">mwcOCPOSxk6iNV6kUREbwgAA</XPD:REF><XPD:ATTR name="#Outgoings" type="integer">1</XPD:ATTR><XPD:REF name="Outgoings[0]">WS3IP6G9CEiaGuEv+DOG/AAA</XPD:REF><XPD:ATTR name="#Incomings" type="integer">1</XPD:ATTR><XPD:REF name="Incomings[0]">znwSI4250k+feVzFEw1a5QAA</XPD:REF></XPD:OBJ><XPD:OBJ name="Subvertices[20]" type="UMLPseudostate" guid="sB+mBRitCUSrY1UmC4bzxAAA"><XPD:ATTR name="Name" type="string">Initial2</XPD:ATTR><XPD:ATTR name="PseudostateKind" type="UMLPseudostateKind">pkInitial</XPD:ATTR><XPD:REF name="ContainerState">sk7l+sINMUe6Qd2pRaeKrwAA</XPD:REF><XPD:ATTR name="#Views" type="integer">1</XPD:ATTR><XPD:REF name="Views[0]">HQm6oGwJzEK7oOejVqybiAAA</XPD:REF><XPD:ATTR name="#Outgoings" type="integer">5</XPD:ATTR><XPD:REF name="Outgoings[0]">imnaqLb3Rkm/zshfu5XyXAAA</XPD:REF><XPD:REF name="Outgoings[1]">swnYmFb8QU+AQ0uocGx5egAA</XPD:REF><XPD:REF name="Outgoings[2]">NVtbuFkt0EqmH79rS7EYqwAA</XPD:REF><XPD:REF name="Outgoings[3]">GJACDIECT02Mu3vnI2SpDQAA</XPD:REF><XPD:REF name="Outgoings[4]">DJ+j6fjOZkymqXvgf+sQLgAA</XPD:REF><XPD:ATTR name="#Incomings" type="integer">2</XPD:ATTR><XPD:REF name="Incomings[0]">ymxIvv1IzE+/uCgYA2v+xwAA</XPD:REF><XPD:REF name="Incomings[1]">+1bmDZVYmEqwCKzuIaDgBwAA</XPD:REF></XPD:OBJ><XPD:OBJ name="Subvertices[21]" type="UMLCompositeState" guid="xeGnAWrSbkKWPAN4WZ6zjgAA"><XPD:ATTR name="Name" type="string">SizeSepec</XPD:ATTR><XPD:REF name="ContainerState">sk7l+sINMUe6Qd2pRaeKrwAA</XPD:REF><XPD:ATTR name="#Views" type="integer">2</XPD:ATTR><XPD:REF name="Views[0]">+99ALHoD3ESIbHQQLRciRgAA</XPD:REF><XPD:REF name="Views[1]">TQlhJAmoXEmtTVzRqQj68AAA</XPD:REF><XPD:ATTR name="#Outgoings" type="integer">1</XPD:ATTR><XPD:REF name="Outgoings[0]">ymxIvv1IzE+/uCgYA2v+xwAA</XPD:REF><XPD:ATTR name="#Incomings" type="integer">1</XPD:ATTR><XPD:REF name="Incomings[0]">HoPF+SDDGEasrduotWR5ngAA</XPD:REF></XPD:OBJ><XPD:OBJ name="Subvertices[22]" type="UMLCompositeState" guid="0fM/mZ5HKE2f+lrVD+4HoQAA"><XPD:ATTR name="Name" type="string">EndLine</XPD:ATTR><XPD:REF name="ContainerState">sk7l+sINMUe6Qd2pRaeKrwAA</XPD:REF><XPD:ATTR name="#Views" type="integer">2</XPD:ATTR><XPD:REF name="Views[0]">kOhqt0eJ00uDdCYcstX59AAA</XPD:REF><XPD:REF name="Views[1]">7ewSYZGC60OlglU7Lj0hCwAA</XPD:REF><XPD:ATTR name="#Incomings" type="integer">6</XPD:ATTR><XPD:REF name="Incomings[0]">T6hTYD4uRkm8gA3bCpEbBQAA</XPD:REF><XPD:REF name="Incomings[1]">Ba3dEIcw3kWKkw1hrOyAnAAA</XPD:REF><XPD:REF name="Incomings[2]">Ys2kkLaDDU2pjMeeiHnQSwAA</XPD:REF><XPD:REF name="Incomings[3]">s2eB4srbM0CyGGbVNivu9gAA</XPD:REF><XPD:REF name="Incomings[4]">YwhBOn43Aki7+xlRJw9siAAA</XPD:REF><XPD:REF name="Incomings[5]">iAYcx8AYmE6GHtzBSyeigAAA</XPD:REF></XPD:OBJ><XPD:OBJ name="Subvertices[23]" type="UMLCompositeState" guid="Tb030w8LaUCrsa87BicFzQAA"><XPD:ATTR name="Name" type="string">Digit</XPD:ATTR><XPD:REF name="ContainerState">sk7l+sINMUe6Qd2pRaeKrwAA</XPD:REF><XPD:ATTR name="#Views" type="integer">2</XPD:ATTR><XPD:REF name="Views[0]">swDlaHWYjk6sxWU4hSTlNgAA</XPD:REF><XPD:REF name="Views[1]">yJS8wTUSGUCc7grAWAT9QAAA</XPD:REF><XPD:ATTR name="#Outgoings" type="integer">2</XPD:ATTR><XPD:REF name="Outgoings[0]">AdOT3CKQfEKgomOU6ohLzAAA</XPD:REF><XPD:REF name="Outgoings[1]">iAYcx8AYmE6GHtzBSyeigAAA</XPD:REF><XPD:ATTR name="#Incomings" type="integer">2</XPD:ATTR><XPD:REF name="Incomings[0]">DJ+j6fjOZkymqXvgf+sQLgAA</XPD:REF><XPD:REF name="Incomings[1]">iJE+Bm7PdUS9+g0y/aJylwAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:ATTR name="#OwnedDiagrams" type="integer">4</XPD:ATTR><XPD:ATTR name="#Transitions" type="integer">94</XPD:ATTR><XPD:OBJ name="OwnedDiagrams[3]" type="UMLStatechartDiagram" guid="ns2NY4p6TUSPvzrsPC923gAA"><XPD:ATTR name="Name" type="string">DataCompiler</XPD:ATTR><XPD:REF name="DiagramOwner">5FtMF1tok0KPKwIo7zINQwAA</XPD:REF><XPD:OBJ name="DiagramView" type="UMLStatechartDiagramView" guid="akLICCSuJE+Zt94RmVDg3wAA"><XPD:REF name="Diagram">ns2NY4p6TUSPvzrsPC923gAA</XPD:REF><XPD:ATTR name="#OwnedViews" type="integer">22</XPD:ATTR><XPD:OBJ name="OwnedViews[0]" type="UMLPseudostateView" guid="A+P+wcZSmE+KFNQ9ziuXjwAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Left" type="integer">84</XPD:ATTR><XPD:ATTR name="Top" type="integer">216</XPD:ATTR><XPD:ATTR name="Width" type="integer">20</XPD:ATTR><XPD:ATTR name="Height" type="integer">20</XPD:ATTR><XPD:REF name="Model">+Rtnrn3km0qcjHJTiMV/UgAA</XPD:REF></XPD:OBJ><XPD:OBJ name="OwnedViews[1]" type="UMLStateView" guid="9tDDuDtPCEiYD7L/8RTulAAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Left" type="integer">144</XPD:ATTR><XPD:ATTR name="Top" type="integer">192</XPD:ATTR><XPD:ATTR name="Width" type="integer">80</XPD:ATTR><XPD:ATTR name="Height" type="integer">40</XPD:ATTR><XPD:REF name="Model">pha8f7KtxEiBBp48XDe5PwAA</XPD:REF><XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="bGnsXU8IPkG0GbyisPDWSgAA"><XPD:OBJ name="NameLabel" type="LabelView" guid="4RRVvVc2yEi/x2HHOP77QAAA"><XPD:ATTR name="Text" type="string">db command</XPD:ATTR></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="LabelView" guid="zYCZrZSr3EaWYxPn/s/YNAAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="LabelView" guid="NvNvE4vh30+HloKuyETMpwAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ></XPD:OBJ><XPD:OBJ name="InternalTransitionCompartment" type="UMLInternalTransitionCompartmentView" guid="uyqiRv3yjEyxhT8p84Zo+QAA"><XPD:REF name="Model">pha8f7KtxEiBBp48XDe5PwAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[2]" type="UMLStateView" guid="2vR7EDOYLk2Vw/wKZXhaiwAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Left" type="integer">156</XPD:ATTR><XPD:ATTR name="Top" type="integer">336</XPD:ATTR><XPD:ATTR name="Width" type="integer">80</XPD:ATTR><XPD:ATTR name="Height" type="integer">40</XPD:ATTR><XPD:REF name="Model">y2W8lwp6GkOeGT+gGo1vQgAA</XPD:REF><XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="wDEpnjvnnUe4OKnZiVWCpQAA"><XPD:OBJ name="NameLabel" type="LabelView" guid="aFwwSvG1tUSo7xrkproQOAAA"><XPD:ATTR name="Text" type="string">dbt command</XPD:ATTR></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="LabelView" guid="GDzE5S9lwkGdmcPlDB5n/AAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="LabelView" guid="LqSs6axLe0OWRsYIvDDKvwAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ></XPD:OBJ><XPD:OBJ name="InternalTransitionCompartment" type="UMLInternalTransitionCompartmentView" guid="mwcOCPOSxk6iNV6kUREbwgAA"><XPD:REF name="Model">y2W8lwp6GkOeGT+gGo1vQgAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[3]" type="UMLStateView" guid="JgA/DAP2F0GVl2dsrHdeagAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Left" type="integer">384</XPD:ATTR><XPD:ATTR name="Top" type="integer">120</XPD:ATTR><XPD:ATTR name="Width" type="integer">80</XPD:ATTR><XPD:ATTR name="Height" type="integer">40</XPD:ATTR><XPD:REF name="Model">ivNQUB73jkqNE0REPaFYSAAA</XPD:REF><XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="nyee8FNtqECyDRoBelKBpgAA"><XPD:OBJ name="NameLabel" type="LabelView" guid="kJ6mXgAnqU2GTUNwmRNA8QAA"><XPD:ATTR name="Text" type="string">Minus</XPD:ATTR></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="LabelView" guid="bIc+7wsXC0ucQPCGanvmEQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="LabelView" guid="TobA3/iEPEOjz7MaAV1kqAAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ></XPD:OBJ><XPD:OBJ name="InternalTransitionCompartment" type="UMLInternalTransitionCompartmentView" guid="O95WvPIeHkidMOC5cAUMDAAA"><XPD:REF name="Model">ivNQUB73jkqNE0REPaFYSAAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[4]" type="UMLStateView" guid="h2IXtTKJt0O8PLdMNS+rqgAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Left" type="integer">639</XPD:ATTR><XPD:ATTR name="Top" type="integer">144</XPD:ATTR><XPD:ATTR name="Width" type="integer">80</XPD:ATTR><XPD:ATTR name="Height" type="integer">40</XPD:ATTR><XPD:REF name="Model">kPTCmUddM0mvyaaBBpA4UQAA</XPD:REF><XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="8hx8mtgF8EK06OxIcpZgpAAA"><XPD:OBJ name="NameLabel" type="LabelView" guid="YCNEz1xuQk6l0CTFRisQiAAA"><XPD:ATTR name="Text" type="string">separator</XPD:ATTR></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="LabelView" guid="hLFV78+oekyr4YWh4roLRwAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="LabelView" guid="K9CSeUgctk+OyA0l2/HKegAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ></XPD:OBJ><XPD:OBJ name="InternalTransitionCompartment" type="UMLInternalTransitionCompartmentView" guid="fNXR2fJnnkSZmpso6SExfAAA"><XPD:REF name="Model">kPTCmUddM0mvyaaBBpA4UQAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[5]" type="UMLTransitionView" guid="zniNJCOCLUyqOtfXhEc1dgAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">103,223;144,217</XPD:ATTR><XPD:REF name="Model">jIdeb32uq0q364D04nIZ7gAA</XPD:REF><XPD:REF name="Head">9tDDuDtPCEiYD7L/8RTulAAA</XPD:REF><XPD:REF name="Tail">A+P+wcZSmE+KFNQ9ziuXjwAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="K8obOqKxSUWhbxy30+dsywAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">jIdeb32uq0q364D04nIZ7gAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="sfB9btkxAUuP+cJ6JoPW+QAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">jIdeb32uq0q364D04nIZ7gAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="3LKg12WDAk+/LG5zuG+VXwAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">jIdeb32uq0q364D04nIZ7gAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[6]" type="UMLTransitionView" guid="j/g3OyQg8kShHCbd1ayvrgAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">101,235;180,336</XPD:ATTR><XPD:REF name="Model">znwSI4250k+feVzFEw1a5QAA</XPD:REF><XPD:REF name="Head">2vR7EDOYLk2Vw/wKZXhaiwAA</XPD:REF><XPD:REF name="Tail">A+P+wcZSmE+KFNQ9ziuXjwAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="duGC5AiFmUOBPqanVvlOUwAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">znwSI4250k+feVzFEw1a5QAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="7K2+aViKFkSjRd76SCH/3QAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">znwSI4250k+feVzFEw1a5QAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="Kb6WjIYFnEGIoHuOL35/ewAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">znwSI4250k+feVzFEw1a5QAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[7]" type="UMLSubmachineStateView" guid="s3si5zO8lkyG/LL9HQ6rvAAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Left" type="integer">300</XPD:ATTR><XPD:ATTR name="Top" type="integer">384</XPD:ATTR><XPD:ATTR name="Width" type="integer">80</XPD:ATTR><XPD:ATTR name="Height" type="integer">56</XPD:ATTR><XPD:REF name="Model">cRzMrzlZAkmTPfgvSyWe/AAA</XPD:REF><XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="ncLkazW2oE6cYa9FOW1M8gAA"><XPD:OBJ name="NameLabel" type="LabelView" guid="TybOdy8IuE27LchRcn3REwAA"><XPD:ATTR name="Text" type="string">rawText</XPD:ATTR></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="LabelView" guid="BdNGUi/thUaQAB/ft3QkbQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="LabelView" guid="S9pJT6LxykugoPF1h8uuEAAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ></XPD:OBJ><XPD:OBJ name="InternalTransitionCompartment" type="UMLInternalTransitionCompartmentView" guid="aX453XE6U0u7xke7XQrcRAAA"><XPD:REF name="Model">cRzMrzlZAkmTPfgvSyWe/AAA</XPD:REF></XPD:OBJ><XPD:OBJ name="IncludeLabel" type="LabelView" guid="mCPYmlaoX0ynRYj/1vQhZQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[8]" type="UMLTransitionView" guid="NQ1KZoX3l0S6EN7cqQwJQAAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">235,371;300,396</XPD:ATTR><XPD:REF name="Model">WS3IP6G9CEiaGuEv+DOG/AAA</XPD:REF><XPD:REF name="Head">s3si5zO8lkyG/LL9HQ6rvAAA</XPD:REF><XPD:REF name="Tail">2vR7EDOYLk2Vw/wKZXhaiwAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="vi6E5cRynE+PcDhNHW+GUQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">WS3IP6G9CEiaGuEv+DOG/AAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="kd3dqKu1j0CLAUXXO65dvAAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">WS3IP6G9CEiaGuEv+DOG/AAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="z1mJuF1h/EeMtO2y7RlL5AAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">WS3IP6G9CEiaGuEv+DOG/AAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[9]" type="UMLPseudostateView" guid="HQm6oGwJzEK7oOejVqybiAAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Left" type="integer">336</XPD:ATTR><XPD:ATTR name="Top" type="integer">192</XPD:ATTR><XPD:ATTR name="Width" type="integer">20</XPD:ATTR><XPD:ATTR name="Height" type="integer">20</XPD:ATTR><XPD:REF name="Model">sB+mBRitCUSrY1UmC4bzxAAA</XPD:REF></XPD:OBJ><XPD:OBJ name="OwnedViews[10]" type="UMLTransitionView" guid="Ywsv7kGFdES/kVYzod3QmwAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">355,193;398,159</XPD:ATTR><XPD:REF name="Model">imnaqLb3Rkm/zshfu5XyXAAA</XPD:REF><XPD:REF name="Head">JgA/DAP2F0GVl2dsrHdeagAA</XPD:REF><XPD:REF name="Tail">HQm6oGwJzEK7oOejVqybiAAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="5hp/MEZkuUiuBAfnPaH92wAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">imnaqLb3Rkm/zshfu5XyXAAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="24j7neadCE6p5A5TODI1kQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">imnaqLb3Rkm/zshfu5XyXAAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="dxRGrGufx02N4KqquSsDQAAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">imnaqLb3Rkm/zshfu5XyXAAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[11]" type="UMLStateView" guid="+99ALHoD3ESIbHQQLRciRgAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Left" type="integer">240</XPD:ATTR><XPD:ATTR name="Top" type="integer">192</XPD:ATTR><XPD:ATTR name="Width" type="integer">80</XPD:ATTR><XPD:ATTR name="Height" type="integer">40</XPD:ATTR><XPD:REF name="Model">xeGnAWrSbkKWPAN4WZ6zjgAA</XPD:REF><XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="roRSJONsmk+eZUuCecg30QAA"><XPD:OBJ name="NameLabel" type="LabelView" guid="PrreiV8ivkOyp+8DjyFDIgAA"><XPD:ATTR name="Text" type="string">SizeSepec</XPD:ATTR></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="LabelView" guid="8ce/lQhEfEOQtJZQfggm+wAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="LabelView" guid="TqrQzG3Q702ARynK9Vj93wAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ></XPD:OBJ><XPD:OBJ name="InternalTransitionCompartment" type="UMLInternalTransitionCompartmentView" guid="TQlhJAmoXEmtTVzRqQj68AAA"><XPD:REF name="Model">xeGnAWrSbkKWPAN4WZ6zjgAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[12]" type="UMLTransitionView" guid="ljflMtabPUKkGxqWNALL9QAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">223,211;240,211</XPD:ATTR><XPD:REF name="Model">HoPF+SDDGEasrduotWR5ngAA</XPD:REF><XPD:REF name="Head">+99ALHoD3ESIbHQQLRciRgAA</XPD:REF><XPD:REF name="Tail">9tDDuDtPCEiYD7L/8RTulAAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Z/DW57cRAEOtaxdDfjcw4AAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">HoPF+SDDGEasrduotWR5ngAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="kMU83pzuqUKNkeQgKtDsrgAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">HoPF+SDDGEasrduotWR5ngAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="gcdXTauBlUy/PQjLEoOhvAAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">HoPF+SDDGEasrduotWR5ngAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[13]" type="UMLTransitionView" guid="VmGXnttgpEO8u/khXQWgHQAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">319,205;336,202</XPD:ATTR><XPD:REF name="Model">ymxIvv1IzE+/uCgYA2v+xwAA</XPD:REF><XPD:REF name="Head">HQm6oGwJzEK7oOejVqybiAAA</XPD:REF><XPD:REF name="Tail">+99ALHoD3ESIbHQQLRciRgAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="XXGrM7B8oUOLkasEOHXcIgAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">ymxIvv1IzE+/uCgYA2v+xwAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="KVkVeWpiak6uOOGASxLRAQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">ymxIvv1IzE+/uCgYA2v+xwAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="OzeLMtV2c0mCluMw+GjrtgAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">ymxIvv1IzE+/uCgYA2v+xwAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[14]" type="UMLTransitionView" guid="hGXc7WU9u0KzNcT2NA+AkwAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">639,144;396,24;348,192</XPD:ATTR><XPD:REF name="Model">+1bmDZVYmEqwCKzuIaDgBwAA</XPD:REF><XPD:REF name="Head">HQm6oGwJzEK7oOejVqybiAAA</XPD:REF><XPD:REF name="Tail">h2IXtTKJt0O8PLdMNS+rqgAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="1Xld/Nbsg020UAm/FkvcVwAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">+1bmDZVYmEqwCKzuIaDgBwAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="rZ5TcnLfak2/JC+nfavJagAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">+1bmDZVYmEqwCKzuIaDgBwAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="CrSr0AgFI0qMaXSkkUhUzQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">+1bmDZVYmEqwCKzuIaDgBwAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[15]" type="UMLStateView" guid="kOhqt0eJ00uDdCYcstX59AAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Left" type="integer">720</XPD:ATTR><XPD:ATTR name="Top" type="integer">240</XPD:ATTR><XPD:ATTR name="Width" type="integer">80</XPD:ATTR><XPD:ATTR name="Height" type="integer">40</XPD:ATTR><XPD:REF name="Model">0fM/mZ5HKE2f+lrVD+4HoQAA</XPD:REF><XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="HJz2MzdT3EWFK+OOVZzLNwAA"><XPD:OBJ name="NameLabel" type="LabelView" guid="6DGMmJkBh0eSlTsMxHNiOgAA"><XPD:ATTR name="Text" type="string">EndLine</XPD:ATTR></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="LabelView" guid="IQdi3SIn00KGOEn3LHn8FAAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="LabelView" guid="ERwBMee7dUCh/BGVo1ZcoAAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ></XPD:OBJ><XPD:OBJ name="InternalTransitionCompartment" type="UMLInternalTransitionCompartmentView" guid="7ewSYZGC60OlglU7Lj0hCwAA"><XPD:REF name="Model">0fM/mZ5HKE2f+lrVD+4HoQAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[16]" type="UMLTransitionView" guid="zDzaj6a7JECFNNv04ewHJAAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">379,397;720,273</XPD:ATTR><XPD:REF name="Model">Ba3dEIcw3kWKkw1hrOyAnAAA</XPD:REF><XPD:REF name="Head">kOhqt0eJ00uDdCYcstX59AAA</XPD:REF><XPD:REF name="Tail">s3si5zO8lkyG/LL9HQ6rvAAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="v55VsChKxESvXkSF63f41QAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">Ba3dEIcw3kWKkw1hrOyAnAAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="3fWfvNY0KEyM40ECrcKFrQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">Ba3dEIcw3kWKkw1hrOyAnAAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="oPL23NW6YUK+Y9jPSffh/AAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">Ba3dEIcw3kWKkw1hrOyAnAAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[17]" type="UMLStateView" guid="swDlaHWYjk6sxWU4hSTlNgAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Left" type="integer">432</XPD:ATTR><XPD:ATTR name="Top" type="integer">192</XPD:ATTR><XPD:ATTR name="Width" type="integer">80</XPD:ATTR><XPD:ATTR name="Height" type="integer">40</XPD:ATTR><XPD:REF name="Model">Tb030w8LaUCrsa87BicFzQAA</XPD:REF><XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="LfSujmPvOUe/ELIxEgT5uAAA"><XPD:OBJ name="NameLabel" type="LabelView" guid="LZaxq1zCT02W26jH8I/ncwAA"><XPD:ATTR name="Text" type="string">Digit</XPD:ATTR></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="LabelView" guid="LbvEXuduM0WxsW2b4LRjIwAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="LabelView" guid="e+WBoML7YU29uH230QOMWAAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR></XPD:OBJ></XPD:OBJ><XPD:OBJ name="InternalTransitionCompartment" type="UMLInternalTransitionCompartmentView" guid="yJS8wTUSGUCc7grAWAT9QAAA"><XPD:REF name="Model">Tb030w8LaUCrsa87BicFzQAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[18]" type="UMLTransitionView" guid="yphHT1akukqBeOV+lyR/lgAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">355,202;432,208</XPD:ATTR><XPD:REF name="Model">DJ+j6fjOZkymqXvgf+sQLgAA</XPD:REF><XPD:REF name="Head">swDlaHWYjk6sxWU4hSTlNgAA</XPD:REF><XPD:REF name="Tail">HQm6oGwJzEK7oOejVqybiAAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="601qx3N6QEu686FrUK5uDQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">DJ+j6fjOZkymqXvgf+sQLgAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="mkN0Q0gDKUu7wC54fID1mgAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">DJ+j6fjOZkymqXvgf+sQLgAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="tXGq15pYqUapEg36j76edgAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">DJ+j6fjOZkymqXvgf+sQLgAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[19]" type="UMLTransitionView" guid="sNQJueA3j02F7WXdYcAoIQAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">511,202;639,172</XPD:ATTR><XPD:REF name="Model">AdOT3CKQfEKgomOU6ohLzAAA</XPD:REF><XPD:REF name="Head">h2IXtTKJt0O8PLdMNS+rqgAA</XPD:REF><XPD:REF name="Tail">swDlaHWYjk6sxWU4hSTlNgAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="MtxV0aij5E+Y/OXVqHN44AAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">AdOT3CKQfEKgomOU6ohLzAAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="496rEcTEvkyqQ70O5rdfYQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">AdOT3CKQfEKgomOU6ohLzAAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="R4xte4lrYUKV440SKlOdogAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">AdOT3CKQfEKgomOU6ohLzAAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[20]" type="UMLTransitionView" guid="YanU7eL9VE2aU5sG+FPKtgAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">436,159;458,192</XPD:ATTR><XPD:REF name="Model">iJE+Bm7PdUS9+g0y/aJylwAA</XPD:REF><XPD:REF name="Head">swDlaHWYjk6sxWU4hSTlNgAA</XPD:REF><XPD:REF name="Tail">JgA/DAP2F0GVl2dsrHdeagAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="T4hKHMgoH0aLRF2yWqvjjwAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">iJE+Bm7PdUS9+g0y/aJylwAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="/LCCEk6cWkCODsim+AIlIAAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">iJE+Bm7PdUS9+g0y/aJylwAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="riX1RO8HrU2qKo+CnM3ebQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">iJE+Bm7PdUS9+g0y/aJylwAA</XPD:REF></XPD:OBJ></XPD:OBJ><XPD:OBJ name="OwnedViews[21]" type="UMLTransitionView" guid="frqeUnGAhESQzgr5cDO4PgAA"><XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR><XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR><XPD:ATTR name="Points" type="Points">511,218;720,253</XPD:ATTR><XPD:REF name="Model">iAYcx8AYmE6GHtzBSyeigAAA</XPD:REF><XPD:REF name="Head">kOhqt0eJ00uDdCYcstX59AAA</XPD:REF><XPD:REF name="Tail">swDlaHWYjk6sxWU4hSTlNgAA</XPD:REF><XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="QUjruw4og0GqRydvrxxh7AAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">iAYcx8AYmE6GHtzBSyeigAAA</XPD:REF></XPD:OBJ><XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="WH+UIsWA5kGkfsQmfQdBagAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">30</XPD:ATTR><XPD:REF name="Model">iAYcx8AYmE6GHtzBSyeigAAA</XPD:REF></XPD:OBJ><XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="sze1jRBJJ0+HPStHceO7OQAA"><XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR><XPD:ATTR name="Alpha" type="real">-1,5707963267949</XPD:ATTR><XPD:ATTR name="Distance" type="real">15</XPD:ATTR><XPD:REF name="Model">iAYcx8AYmE6GHtzBSyeigAAA</XPD:REF></XPD:OBJ></XPD:OBJ></XPD:OBJ></XPD:OBJ><XPD:ATTR name="#Transitions" type="integer">115</XPD:ATTR>{$MODE Delphi}{$MODE Delphi}{$EndIf}{$EndIf}{$M+}uses Classes, SysUtils, CoreDevices;TTickReciever = class {$ifndef FPC} abstract {$ENDIF}publicprocedure Tick; virtual; abstract;end;TClock = class(TCoreClockDev)procedure AddTickReciever(const rcv: TTickReciever);override;procedure DelTickReciever(const rcv: TTickReciever);override;procedure Tick;override;