webrtc/modules/audio_device/main/documentation/audio_device_class_diagram.graphml

569 lines
35 KiB
Plaintext
Raw Normal View History

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.0/ygraphml.xsd">
<!--Created by yFiles for Java 2.7-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key attr.name="url" attr.type="string" for="node" id="d1"/>
<key attr.name="description" attr.type="string" for="node" id="d2">
<default/>
</key>
<key for="node" id="d3" yfiles.type="nodegraphics"/>
<key attr.name="url" attr.type="string" for="edge" id="d4"/>
<key attr.name="description" attr.type="string" for="edge" id="d5">
<default/>
</key>
<key for="edge" id="d6" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<node id="n0">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="196.0" width="382.6411085450346" x="428.85889145496543" y="-201.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="159.3017578125" x="111.66967536626731" y="26.701171875">AudioDeviceModule</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="abstract" use3DEffect="true">
<y:AttributeLabel>static AudioDeviceModule* Create(const WebRtc_Word32 id, const AudioLayer audioLayer = kPlatformDefaultAudio);
static void Destroy(AudioDeviceModule* module);</y:AttributeLabel>
<y:MethodLabel>static WebRtc_Word32 GetVersion(WebRtc_Word8* version, WebRtc_UWord32& remainingBufferInBytes, WebRtc_UWord32& position);
virtual WebRtc_Word32 ChangeUniqueId(const WebRtc_Word32 id) = 0;
virtual ErrorCode LastError() const = 0;
virtual WebRtc_Word32 RegisterEventObserver(AudioDeviceObserver* eventCallback) = 0;
virtual WebRtc_Word32 Init() = 0;
virtual WebRtc_Word32 Terminate() = 0;
// etc.</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n1">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="102.0" width="237.0" x="883.0" y="6.502858301586258"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="170.89892578125" x="33.050537109375" y="26.701171875">AudioDeviceObserver</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="abstract" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>virtual void OnErrorIsReported() = 0;
virtual void OnWarningIsReported() = 0;</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n2">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="62.0" width="237.0" x="501.67944572748274" y="-355.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="80.55908203125" x="78.220458984375" y="26.701171875">Module</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="abstract" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n3">
<data key="d1"/>
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="118.91531178981887" width="335.9659584295611" x="452.19646651270216" y="174.54806070826308"/>
<y:Fill color="#99CC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="186.025390625" x="74.97028390228056" y="3.0">ModuleAudioDeviceImpl</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>AudioDeviceGeneric* _ptrAudioDevice
AudioDeviceUtility* _ptrAudioDeviceUtility
AudioDeviceObserver* _ptrCbAudioDeviceObserver
AudioDeviceBuffer _audioDeviceBuffer</y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n4">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="62.0" width="237.0" x="1092.3265892689537" y="203.00571660317252"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="131.15625" x="52.921875" y="26.701171875">AudioDeviceGeneric</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="abstract" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n5">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="62.0" width="237.0" x="801.3265892689537" y="412.9490993071594"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="173.7490234375" x="31.62548828125" y="3.0">AudioDeviceWindowsWave</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>AudioDeviceBuffer* _ptrAudioBuffer</y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n6">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="62.0" width="237.0" x="1092.3265892689537" y="412.9490993071594"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="169.4072265625" x="33.79638671875" y="3.0">AudioDeviceWindowsCore</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>AudioDeviceBuffer* _ptrAudioBuffer</y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n7">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="62.0" width="237.0" x="1383.3265892689537" y="412.9490993071594"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="152.79541015625" x="42.102294921875" y="3.0">AudioDeviceLinuxALSA</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>AudioDeviceBuffer* _ptrAudioBuffer</y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n8">
<data key="d3">
<y:UMLNoteNode>
<y:Geometry height="30.0" width="170.5628161888701" x="1416.5451811745186" y="308.7057641693507"/>
<y:Fill color="#C0C0C0" transparent="true"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="150.748046875" x="9.907384656935164" y="5.6494140625">More platforms to be added</y:NodeLabel>
</y:UMLNoteNode>
</data>
</node>
<node id="n9">
<data key="d3">
<y:UMLNoteNode>
<y:Geometry height="91.83895446880268" width="299.26939291736926" x="883.0" y="-292.42242833052296"/>
<y:Fill color="#C0C0C0" transparent="true"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="77.505859375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="274.796875" x="12.23625895868463" y="4.0">User can specify the audio layer at construction.
It is possible to select Windows Wave audio even
if we build with CORE_AUDIO flag and run on e.g.
a Vista or Windows 7 machine.
The user can also select default audio.</y:NodeLabel>
</y:UMLNoteNode>
</data>
</node>
<node id="n10">
<data key="d3">
<y:UMLNoteNode>
<y:Geometry height="30.0" width="237.0" x="883.0000000000001" y="-118.0"/>
<y:Fill color="#FFFF99" transparent="true"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="190.099609375" x="23.4501953125" y="5.6494140625">audio_device_defines.h</y:NodeLabel>
</y:UMLNoteNode>
</data>
</node>
<node id="n11">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="62.0" width="237.0" x="-88.96769781398837" y="203.00571660317252"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="118.8544921875" x="59.07275390625" y="26.701171875">AudioDeviceUtility</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="abstract" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n12">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="62.0" width="237.0" x="-379.96769781398837" y="412.9490993071594"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="175.90087890625" x="30.549560546875" y="3.0">AudioDeviceUtilityWindows</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n13">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="62.0" width="237.0" x="-88.96769781398837" y="412.9490993071594"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="153.51904296875" x="41.740478515625" y="3.0">AudioDeviceUtilityLinux</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n14">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="62.0" width="237.0" x="202.03230218601163" y="412.9490993071594"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="144.1435546875" x="46.42822265625" y="3.0">AudioDeviceUtilityMac</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n15">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="102.0" width="299.26939291736926" x="58.08949853759606" y="6.502858301586258"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="132.55908203125" x="83.35515544305963" y="26.701171875">AudioTransport</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="abstract" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>virtual WebRtc_Word32 RecordedDataIsAvailable() = 0;
virtual WebRtc_Word32 NeedMorePlayData() = 0;</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n16">
<data key="d3">
<y:UMLClassNode>
<y:Geometry height="91.83895446880268" width="262.6127704387991" x="484.11640314087765" y="524.6092672402042"/>
<y:Fill color="#99CC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.92626953125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="121.01904296875" x="70.79686373502454" y="3.0">AudioDeviceBuffer</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>AudioTransport* _ptrCbAudioTransport</y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n17">
<data key="d3">
<y:ShapeNode>
<y:Geometry height="53.52248609699768" width="96.63404059991674" x="58.08949853759606" y="-201.0"/>
<y:Fill color="#99CC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="48.103515625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="85.375" x="5.629520299958372" y="2.709485235998841">Platform
independent
implementation</y:NodeLabel>
<y:Shape type="rectangle3d"/>
</y:ShapeNode>
</data>
</node>
<node id="n18">
<data key="d3">
<y:UMLNoteNode>
<y:Geometry height="136.2983407043685" width="377.3189013546028" x="61.71340083140882" y="577.9611479578919"/>
<y:Fill color="#C0C0C0" transparent="true"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="121.609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="356.845703125" x="10.236599114801407" y="4.0">All audio/data transport goes "through" this platform-generic
class. The AudioDevice implementations copies recorded data
to this buffer and then signals that a AudioTransport callback
shall be performed. Also - in the other direction - the AudioDevices
informs this class when they needs more data to be played out, a
callback is performed and data stored in the AudioDeviceBuffer.
The AudioDevice implementations can then copy the stored data
and play it out.</y:NodeLabel>
</y:UMLNoteNode>
</data>
</node>
<edge id="e0" source="n0" target="n2">
<data key="d4"/>
<data key="d5"><![CDATA[UMLinherits]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0000023681077437" y="-47.9906005859375"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n3" target="n0">
<data key="d4"/>
<data key="d5"><![CDATA[UMLimplements]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="93.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0000023681077437" y="-91.74933085192315"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n3" target="n4">
<data key="d4"/>
<data key="d5"><![CDATA[UMLhas]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="diamond"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="150.10699489857723" y="1.9999945572740785"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n5" target="n4">
<data key="d4"/>
<data key="d5"><![CDATA[UMLimplements]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="919.8265892689537" y="374.6050858164343"/>
<y:Point x="1210.8265892689537" y="374.6050858164343"/>
</y:Path>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="143.49999014786" y="-36.362687621065675"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n6" target="n4">
<data key="d4"/>
<data key="d5"><![CDATA[UMLimplements]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="30.818718381113058"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0000511830162395" y="-75.96598193741215"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e5" source="n7" target="n4">
<data key="d4"/>
<data key="d5"><![CDATA[UMLimplements]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="26.302698145025374">
<y:Point x="1501.8265892689537" y="374.6050858164343"/>
<y:Point x="1210.8265892689537" y="374.6050858164343"/>
</y:Path>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-147.49994881698376" y="-36.362687621065675"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e6" source="n9" target="n0">
<data key="d4"/>
<data key="d5"><![CDATA[UMLrelatesTo]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="130.28613709564476" ty="10.13153456998316">
<y:Point x="750.4655828231275" y="-246.50295109612162"/>
</y:Path>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="none"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-72.80315829546748" y="1.9999938501674421"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e7" source="n10" target="n0">
<data key="d4"/>
<data key="d5"><![CDATA[UMLrelatesTo]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="-96.774873524452" sy="-0.029510961214157305" tx="187.56840193592325" ty="-0.029510961214157305"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="none"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-37.740478515625" y="1.9999995368327177"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e8" source="n12" target="n11">
<data key="d4"/>
<data key="d5"><![CDATA[UMLimplements]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="-261.46769781398837" y="374.6050858164343"/>
<y:Point x="29.532302186011634" y="374.6050858164343"/>
</y:Path>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="143.50001458835538" y="-36.362687621065675"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e9" source="n13" target="n11">
<data key="d4"/>
<data key="d5"><![CDATA[UMLimplements]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="30.818718381113058"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="1.9999993295663216" y="-75.96598193741215"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e10" source="n14" target="n11">
<data key="d4"/>
<data key="d5"><![CDATA[UMLimplements]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="26.302698145025374">
<y:Point x="320.53230218601163" y="374.6050858164343"/>
<y:Point x="29.532302186011634" y="374.6050858164343"/>
</y:Path>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-147.49998541164462" y="-36.362687621065675"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e11" source="n3" target="n11">
<data key="d4"/>
<data key="d5"><![CDATA[UMLhas]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="106.45784148397979" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="diamond"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-154.0587113537681" y="1.9999945572740785"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e12" source="n3" target="n16">
<data key="d4"/>
<data key="d5"><![CDATA[UMLhas]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="4.756657367205548" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="diamond"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0000023681077437" y="113.58859648047121"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e13" source="n3" target="n1">
<data key="d4"/>
<data key="d5"><![CDATA[UMLuses]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="101.83648960739015" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="722.0159353348729" y="131.77403035413153"/>
<y:Point x="1001.5" y="131.77403035413153"/>
</y:Path>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="short"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="137.7420374916552" y="-40.77957377184504"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e14" source="n16" target="n15">
<data key="d4"/>
<data key="d5"><![CDATA[UMLuses]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="-83.96395713625839" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="531.4588312240188" y="336.3319175327241"/>
<y:Point x="207.7241949962807" y="336.3319175327241"/>
</y:Path>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="short"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-163.86728815938147" y="-186.2551186000884"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e15" source="n5" target="n16">
<data key="d4"/>
<data key="d5"><![CDATA[UMLuses]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="919.8265892689537" y="570.5287444746056"/>
</y:Path>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="short"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-83.98621769677857" y="97.58370663280868"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e16" source="n6" target="n16">
<data key="d4"/>
<data key="d5"><![CDATA[UMLuses]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="122.33608092378756" ty="0.0">
<y:Point x="1210.8265892689537" y="570.5287444746056"/>
</y:Path>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="short"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-229.48615666162232" y="97.58370663280868"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e17" source="n7" target="n16">
<data key="d4"/>
<data key="d5"><![CDATA[UMLuses]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="122.33608092378756" ty="0.0">
<y:Point x="1501.8265892689537" y="570.5287444746056"/>
</y:Path>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="short"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-374.9861566616223" y="97.58370663280868"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e18" source="n18" target="n16">
<data key="d4"/>
<data key="d5"><![CDATA[UMLrelatesTo]]></data>
<data key="d6">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="615.4227883602772" y="646.1103183100761"/>
</y:Path>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="none"/>
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="90.78726817353504" y="2.0000277827323316"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources/>
</data>
</graphml>