Index: .gitignore
===================================================================
--- .gitignore	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ .gitignore	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,38 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+compose.yaml
+.env
+.mvn/* 
+.mvn 
Index: _BUILD_BOARD.xml
===================================================================
--- ER_BUILD_BOARD.xml	(revision 60a0e5c67655330cf92f154a1aa53fa6f5175b22)
+++ 	(revision )
@@ -1,1 +1,0 @@
-<drawing><figures><ent id="0"><children><r id="1" x="310" y="58" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="2" x="325.138671875" y="71.015625"><a><text><string>THREAD</string></text></a></t></children></ent><disjuncao id="3"><children><circ id="4" x="339" y="184" w="20" h="20"><a><fillColor><color rgba="#fff5f2e0"/></fillColor></a></circ><tn id="5" x="343" y="185"><a><fontBold><boolean>true</boolean></fontBold><fontSize><double>16</double></fontSize><text><string>d</string></text></a></tn></children></disjuncao><ent id="6"><children><r id="7" x="487" y="293" w="127.572265625" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="8" x="497" y="306.015625"><a><text><string>PROJECT_THREAD</string></text></a></t></children></ent><ent id="9"><children><r id="a" x="112" y="282" w="127.572265625" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="b" x="129.9599609375" y="295.015625"><a><text><string>TOPIC_THREAD</string></text></a></t></children></ent><entfraca id="c"><children><r id="d" x="120" y="638" w="150.4765625" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="e" x="130" y="651.015625"><a><text><string>DISCUSSION_THREAD</string></text></a></t></children></entfraca><relfraco id="f"><children><diamond id="10" x="112" y="480" w="185" h="77"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="11" x="173.263671875" y="511.515625"><a><text><string>CONTAINS</string></text></a></t></children></relfraco><llabelDoubleMuitos id="12"><points><p colinear="true" x="201.9438984094982" y="557" c1x="-8" c1y="-335" c2x="-8" c2y="-335"/><p colinear="true" x="196.56612623207886" y="638" c1x="-8" c1y="-335" c2x="-8" c2y="-335"/></points><startConnector><rConnector id="13"><Owner><relfraco ref="f"/></Owner></rConnector></startConnector><endConnector><rConnector id="14"><Owner><entfraca ref="c"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="15"><points><p colinear="true" x="199.39383886042145" y="480" c1x="119" c1y="-104" c2x="119" c2y="-104"/><p colinear="true" x="178.4386840538395" y="322" c1x="119" c1y="-104" c2x="119" c2y="-104"/></points><startConnector><rConnector id="16"><Owner><relfraco ref="f"/></Owner></rConnector></startConnector><endConnector><rConnector id="17"><Owner><ent ref="9"/></Owner></rConnector></endConnector></llabelUm><generalizacaoLine id="18"><points><p colinear="true" x="339" y="200.2350666117911" c1x="100" c1y="-141" c2x="100" c2y="-141"/><p colinear="true" x="207.86277488425927" y="282" c1x="100" c1y="-141" c2x="100" c2y="-141"/></points><startConnector><rConnector id="19"><Owner><disjuncao ref="3"/></Owner></rConnector></startConnector><endConnector><rConnector id="1a"><Owner><ent ref="9"/></Owner></rConnector></endConnector></generalizacaoLine><generalizacaoLine id="1b"><points><p colinear="true" x="359" y="199.89733290099647" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="516.8724970456933" y="293" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="1c"><Owner><disjuncao ref="3"/></Owner></rConnector></startConnector><endConnector><rConnector id="1d"><Owner><ent ref="6"/></Owner></rConnector></endConnector></generalizacaoLine><rel id="1e"><children><diamond id="1f" x="309" y="290" w="109" h="44"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="20" x="323.193359375" y="305.015625"><a><text><string>BELONGS_TO</string></text></a></t></children></rel><llabelUm id="21"><points><p colinear="true" x="418" y="312.2909985869299" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="487" y="312.65941881625395" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="22"><Owner><rel ref="1e"/></Owner></rConnector></startConnector><endConnector><rConnector id="23"><Owner><ent ref="6"/></Owner></rConnector></endConnector></llabelUm><llabelMuitos id="24"><points><p colinear="true" x="309" y="309.0966449726614" c1x="100" c1y="-141" c2x="100" c2y="-141"/><p colinear="true" x="239.572265625" y="305.3980511812048" c1x="100" c1y="-141" c2x="100" c2y="-141"/></points><startConnector><rConnector id="25"><Owner><rel ref="1e"/></Owner></rConnector></startConnector><endConnector><rConnector id="26"><Owner><ent ref="9"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><atr id="27" nullable="false" attributeType="VARCHAR2(128)"><children><e id="28" x="81" y="182" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="29" x="108.5810546875" y="185.015625"><a><text><string>TAG</string></text></a></t></children></atr><lcaf id="2a"><points><p colinear="true" x="125.9805575284091" y="202" c1x="100" c1y="-141" c2x="100" c2y="-141"/><p colinear="true" x="165.8250177556818" y="282" c1x="100" c1y="-141" c2x="100" c2y="-141"/></points><startConnector><rConnector id="2b"><Owner><atr ref="27"/></Owner></rConnector></startConnector><endConnector><rConnector id="2c"><Owner><ent ref="9"/></Owner></rConnector></endConnector></lcaf><ent id="2d"><children><r id="2e" x="495" y="412" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="2f" x="518.83984375" y="425.015625"><a><text><string>USER</string></text></a></t></children></ent><llabelDoubleGeneralizacao id="30" labelGeneralizacaoText=""><points><p colinear="true" x="349.08620689655174" y="184" c1x="-37.61389275958845" c1y="-80" c2x="-37.61389275958845" c2y="-80"/><p colinear="true" x="349.82758620689657" y="98" c1x="-37.61389275958845" c1y="-80" c2x="-37.61389275958845" c2y="-80"/></points><startConnector><rConnector id="31"><Owner><disjuncao ref="3"/></Owner></rConnector></startConnector><endConnector><rConnector id="32"><Owner><ent ref="0"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleGeneralizacao><sobreposicao id="33"><children><circ id="34" x="567" y="506" w="20" h="20"><a><fillColor><color rgba="#fff5f2e0"/></fillColor></a></circ><tn id="35" x="571" y="507"><a><fontBold><boolean>true</boolean></fontBold><fontSize><double>16</double></fontSize><text><string>o</string></text></a></tn></children></sobreposicao><lcaf id="36"><points><p colinear="true" x="572" y="506" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="545" y="452" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="37"><Owner><sobreposicao ref="33"/></Owner></rConnector></startConnector><endConnector><rConnector id="38"><Owner><ent ref="2d"/></Owner></rConnector></endConnector></lcaf><ent id="39"><children><r id="3a" x="565" y="634" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="3b" x="569.0498046875" y="647.015625"><a><text><string>DEVELOPER</string></text></a></t></children></ent><generalizacaoLine id="3c"><points><p colinear="true" x="579.0289855072464" y="526" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="600.9420289855072" y="634" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="3d"><Owner><sobreposicao ref="33"/></Owner></rConnector></startConnector><endConnector><rConnector id="3e"><Owner><ent ref="39"/></Owner></rConnector></endConnector></generalizacaoLine><rel id="3f"><children><diamond id="40" x="617" y="508" w="107.087890625" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="41" x="627" y="521.015625"><a><text><string>INVLOVLED_IN</string></text></a></t></children></rel><llabelDoubleMuitos id="42"><points><p colinear="true" x="659.403683684593" y="508" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="561.926394440407" y="333" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="43"><Owner><rel ref="3f"/></Owner></rConnector></startConnector><endConnector><rConnector id="44"><Owner><ent ref="6"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><ent id="45"><children><r id="46" x="776" y="678" w="130" h="41"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="47" x="781.591796875" y="691.515625"><a><text><string>PROJECT_MANAGER</string></text></a></t></children></ent><sobreposicao id="48"><children><circ id="49" x="693" y="671" w="20" h="20"><a><fillColor><color rgba="#fff5f2e0"/></fillColor></a></circ><tn id="4a" x="697" y="672"><a><fontBold><boolean>true</boolean></fontBold><fontSize><double>16</double></fontSize><text><string>o</string></text></a></tn></children></sobreposicao><generalizacaoLine id="4b"><points><p colinear="true" x="713" y="682.268115942029" c1x="-380" c1y="449" c2x="-380" c2y="449"/><p colinear="true" x="776" y="690.2572463768116" c1x="-380" c1y="449" c2x="-380" c2y="449"/></points><startConnector><rConnector id="4c"><Owner><sobreposicao ref="48"/></Owner></rConnector></startConnector><endConnector><rConnector id="4d"><Owner><ent ref="45"/></Owner></rConnector></endConnector></generalizacaoLine><lcaf id="4e"><points><p colinear="true" x="645" y="665.0204081632653" c1x="-380" c1y="449" c2x="-380" c2y="449"/><p colinear="true" x="693" y="678.2448979591836" c1x="-380" c1y="449" c2x="-380" c2y="449"/></points><startConnector><rConnector id="4f"><Owner><ent ref="39"/></Owner></rConnector></startConnector><endConnector><rConnector id="50"><Owner><sobreposicao ref="48"/></Owner></rConnector></endConnector></lcaf><rel id="51"><children><diamond id="52" x="1020" y="509" w="133" h="49"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="53" x="1043.5859375" y="526.515625"><a><text><string>IS_OWNED_BY</string></text></a></t></children></rel><llabelDoubleMuitos id="54"><points><p colinear="true" x="1026.9762369791667" y="509" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="599.3769597682823" y="333" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="55"><Owner><rel ref="51"/></Owner></rConnector></startConnector><endConnector><rConnector id="56"><Owner><ent ref="6"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelDoubleUm id="57"><points><p colinear="true" x="1050.0469696969697" y="558" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="871.5015151515152" y="678" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="58"><Owner><rel ref="51"/></Owner></rConnector></startConnector><endConnector><rConnector id="59"><Owner><ent ref="45"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleUm><llabelDoubleMuitos id="5a"><points><p colinear="true" x="660.140144469246" y="548" c1x="-245.0838112256206" c1y="414" c2x="-245.0838112256206" c2y="414"/><p colinear="true" x="615.403800843254" y="634" c1x="-245.0838112256206" c1y="414" c2x="-245.0838112256206" c2y="414"/></points><startConnector><rConnector id="5b"><Owner><rel ref="3f"/></Owner></rConnector></startConnector><endConnector><rConnector id="5c"><Owner><ent ref="39"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>M</string></text></a></llabelDoubleMuitos><ent id="5d"><children><r id="5e" x="1535" y="562" w="101.861328125" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="5f" x="1545" y="575.015625"><a><text><string>PERMISSIONS</string></text></a></t></children></ent><rel id="60"><children><diamond id="61" x="1407" y="562" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="62" x="1434.5751953125" y="575.015625"><a><text><string>HAS</string></text></a></t></children></rel><llabelMuitos id="63"><points><p colinear="true" x="1487" y="582" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="1535" y="582" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="64"><Owner><rel ref="60"/></Owner></rConnector></startConnector><endConnector><rConnector id="65"><Owner><ent ref="5d"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><rel id="66"><children><diamond id="67" x="783" y="852" w="100.61328125" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="68" x="820.8818359375" y="865.015625"><a><text><string>HAS</string></text></a></t></children></rel><llabelMuitos id="69"><points><p colinear="true" x="812.3610772649082" y="852" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="625.9455633600917" y="674" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="6a"><Owner><rel ref="66"/></Owner></rConnector></startConnector><endConnector><rConnector id="6b"><Owner><ent ref="39"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><rel id="6c"><children><diamond id="6d" x="1020" y="602" w="133" h="48"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="6e" x="1058.9814453125" y="619.015625"><a><text><string>CREATES</string></text></a></t></children></rel><llabelUm id="6f"><points><p colinear="true" x="1020" y="645.6384928716905" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="906" y="679.3044806517312" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="70"><Owner><rel ref="6c"/></Owner></rConnector></startConnector><endConnector><rConnector id="71"><Owner><ent ref="45"/></Owner></rConnector></endConnector></llabelUm><entfraca id="72"><children><r id="73" x="1227" y="561" w="109.958984375" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="74" x="1237" y="574.015625"><a><text><string>CUSTOM_ROLE</string></text></a></t></children></entfraca><llabelMuitos id="75"><points><p colinear="true" x="864.1432627255155" y="852" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="1251.1428700869844" y="601" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="76"><Owner><rel ref="66"/></Owner></rConnector></startConnector><endConnector><rConnector id="77"><Owner><entfraca ref="72"/></Owner></rConnector></endConnector><a><text><string>M</string></text></a></llabelMuitos><llabelDoubleMuitos id="78"><points><p colinear="true" x="1407" y="581.7576058846853" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="1336.958984375" y="581.333167634231" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="79"><Owner><rel ref="60"/></Owner></rConnector></startConnector><endConnector><rConnector id="7a"><Owner><entfraca ref="72"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>M</string></text></a></llabelDoubleMuitos><llabelDoubleMuitos id="7b"><points><p colinear="true" x="1153" y="610.6914887770956" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="1227" y="593.656453732059" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="7c"><Owner><rel ref="6c"/></Owner></rConnector></startConnector><endConnector><rConnector id="7d"><Owner><entfraca ref="72"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><relfraco id="7e"><children><diamond id="7f" x="915" y="370" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="80" x="932.263671875" y="388.015625"><a><text><string>CONTAINS</string></text></a></t></children></relfraco><llabelUm id="81"><points><p colinear="true" x="915" y="385.3637839283137" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="614.572265625" y="325.6733393434748" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="82"><Owner><relfraco ref="7e"/></Owner></rConnector></startConnector><endConnector><rConnector id="83"><Owner><ent ref="6"/></Owner></rConnector></endConnector></llabelUm><llabelDoubleMuitos id="84"><points><p colinear="true" x="1006.306383358535" y="420" c1x="347" c1y="325" c2x="347" c2y="325"/><p colinear="true" x="1247.734385500672" y="561" c1x="347" c1y="325" c2x="347" c2y="325"/></points><startConnector><rConnector id="85"><Owner><relfraco ref="7e"/></Owner></rConnector></startConnector><endConnector><rConnector id="86"><Owner><entfraca ref="72"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><relfraco id="87"><children><diamond id="88" x="720" y="447" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="89" x="737.263671875" y="465.015625"><a><text><string>CONTAINS</string></text></a></t></children></relfraco><llabelUm id="8a"><points><p colinear="true" x="734.2682598761793" y="447" c1x="159" c1y="205" c2x="159" c2y="205"/><p colinear="true" x="578.1715249115566" y="333" c1x="159" c1y="205" c2x="159" c2y="205"/></points><startConnector><rConnector id="8b"><Owner><relfraco ref="87"/></Owner></rConnector></startConnector><endConnector><rConnector id="8c"><Owner><ent ref="6"/></Owner></rConnector></endConnector></llabelUm><entfraca id="8d"><children><r id="8e" x="881" y="528" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="8f" x="892.083984375" y="541.015625"><a><text><string>CHANNEL</string></text></a></t></children></entfraca><llabelDoubleMuitos id="90"><points><p colinear="true" x="817" y="496.1704918032787" c1x="159" c1y="205" c2x="159" c2y="205"/><p colinear="true" x="881" y="528.0655737704918" c1x="159" c1y="205" c2x="159" c2y="205"/></points><startConnector><rConnector id="91"><Owner><relfraco ref="87"/></Owner></rConnector></startConnector><endConnector><rConnector id="92"><Owner><entfraca ref="8d"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><rel id="93"><children><diamond id="94" x="701" y="589" w="115.37890625" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="95" x="711" y="602.015625"><a><text><string>IS_CREATED_BY</string></text></a></t></children></rel><llabelDoubleMuitos id="96"><points><p colinear="true" x="811.9060258709017" y="589" c1x="159" c1y="205" c2x="159" c2y="205"/><p colinear="true" x="881" y="563.0329109659098" c1x="159" c1y="205" c2x="159" c2y="205"/></points><startConnector><rConnector id="97"><Owner><rel ref="93"/></Owner></rConnector></startConnector><endConnector><rConnector id="98"><Owner><entfraca ref="8d"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="99"><points><p colinear="true" x="701" y="625.891369822974" c1x="159" c1y="205" c2x="159" c2y="205"/><p colinear="true" x="645" y="642.2880707595725" c1x="159" c1y="205" c2x="159" c2y="205"/></points><startConnector><rConnector id="9a"><Owner><rel ref="93"/></Owner></rConnector></startConnector><endConnector><rConnector id="9b"><Owner><ent ref="39"/></Owner></rConnector></endConnector></llabelUm><rel id="9c"><children><diamond id="9d" x="311" y="391" w="123" h="41"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="9e" x="324.810546875" y="404.515625"><a><text><string>IS_CREATED_BY</string></text></a></t></children></rel><llabelDoubleMuitos id="9f"><points><p colinear="true" x="335.67228970462327" y="391" c1x="159" c1y="205" c2x="159" c2y="205"/><p colinear="true" x="211.7156062714041" y="322" c1x="159" c1y="205" c2x="159" c2y="205"/></points><startConnector><rConnector id="a0"><Owner><rel ref="9c"/></Owner></rConnector></startConnector><endConnector><rConnector id="a1"><Owner><ent ref="9"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="a2"><points><p colinear="true" x="434" y="419.2584615384615" c1x="159" c1y="205" c2x="159" c2y="205"/><p colinear="true" x="495" y="426.95384615384614" c1x="159" c1y="205" c2x="159" c2y="205"/></points><startConnector><rConnector id="a3"><Owner><rel ref="9c"/></Owner></rConnector></startConnector><endConnector><rConnector id="a4"><Owner><ent ref="2d"/></Owner></rConnector></endConnector></llabelUm><ent id="a5"><children><r id="a6" x="451" y="629" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="a7" x="451.859375" y="642.015625"><a><text><string>MODERATOR</string></text></a></t></children></ent><sobreposicao id="a8"><children><circ id="a9" x="505" y="506" w="20" h="20"><a><fillColor><color rgba="#fff5f2e0"/></fillColor></a></circ><tn id="aa" x="509" y="507"><a><fontBold><boolean>true</boolean></fontBold><fontSize><double>16</double></fontSize><text><string>o</string></text></a></tn></children></sobreposicao><generalizacaoLine id="ab"><points><p colinear="true" x="513.1954887218045" y="526" c1x="-568" c1y="329" c2x="-568" c2y="329"/><p colinear="true" x="494.609022556391" y="629" c1x="-568" c1y="329" c2x="-568" c2y="329"/></points><startConnector><rConnector id="ac"><Owner><sobreposicao ref="a8"/></Owner></rConnector></startConnector><endConnector><rConnector id="ad"><Owner><ent ref="a5"/></Owner></rConnector></endConnector></generalizacaoLine><lcaf id="ae"><points><p colinear="true" x="530.2380952380952" y="452" c1x="-568" c1y="329" c2x="-568" c2y="329"/><p colinear="true" x="517.3809523809524" y="506" c1x="-568" c1y="329" c2x="-568" c2y="329"/></points><startConnector><rConnector id="af"><Owner><ent ref="2d"/></Owner></rConnector></startConnector><endConnector><rConnector id="b0"><Owner><sobreposicao ref="a8"/></Owner></rConnector></endConnector></lcaf><rel id="b1"><children><diamond id="b2" x="319" y="534" w="116.0390625" h="32"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="b3" x="319.00005726685026" y="543.015625"><a><text><string>IS_MODERATED_BY</string></text></a></t></children></rel><llabelDoubleMuitos id="b4"><points><p colinear="true" x="364.0367581369138" y="534" c1x="159" c1y="205" c2x="159" c2y="205"/><p colinear="true" x="192.01463499563914" y="322" c1x="159" c1y="205" c2x="159" c2y="205"/></points><startConnector><rConnector id="b5"><Owner><rel ref="b1"/></Owner></rConnector></startConnector><endConnector><rConnector id="b6"><Owner><ent ref="9"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="b7"><points><p colinear="true" x="395.4406411143867" y="566" c1x="159" c1y="205" c2x="159" c2y="205"/><p colinear="true" x="467.973648461298" y="629" c1x="159" c1y="205" c2x="159" c2y="205"/></points><startConnector><rConnector id="b8"><Owner><rel ref="b1"/></Owner></rConnector></startConnector><endConnector><rConnector id="b9"><Owner><ent ref="a5"/></Owner></rConnector></endConnector></llabelUm><rel id="ba"><children><diamond id="bb" x="161" y="861" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="bc" x="176.7099609375" y="874.015625"><a><text><string>REPLIES</string></text></a></t></children></rel><llabelGeneralizacao id="bd" labelGeneralizacaoText="reply(N)"><points><p colinear="true" x="200.48325392376682" y="861" c1x="-110.41036184210526" c1y="-229" c2x="-110.41036184210526" c2y="-229"/><p colinear="true" x="195.75502732623318" y="678" c1x="-110.41036184210526" c1y="-229" c2x="-110.41036184210526" c2y="-229"/></points><startConnector><rConnector id="be"><Owner><rel ref="ba"/></Owner></rConnector></startConnector><endConnector><rConnector id="bf"><Owner><entfraca ref="c"/></Owner></rConnector></endConnector></llabelGeneralizacao><llabelGeneralizacao id="c0" labelGeneralizacaoText="discussion(1)"><points><p colinear="true" x="168.09677419354838" y="861" c1x="-357.74596547764344" c1y="-195.54956591772202" c2x="-357.74596547764344" c2y="-195.54956591772202"/><p colinear="true" x="150" y="850"/><p colinear="true" x="91" y="801"/><p colinear="true" x="127" y="714"/><p colinear="true" x="170.86746651785717" y="678" c1x="-357.74596547764344" c1y="-195.54956591772202" c2x="-357.74596547764344" c2y="-195.54956591772202"/></points><startConnector><rConnector id="c1"><Owner><rel ref="ba"/></Owner></rConnector></startConnector><endConnector><rConnector id="c2"><Owner><entfraca ref="c"/></Owner></rConnector></endConnector></llabelGeneralizacao></figures></drawing>
Index: docs/ERModelWiki.txt
===================================================================
--- docs/ERModelWiki.txt	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ docs/ERModelWiki.txt	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,107 @@
+== ER Дијаграм 
+[[Image(ER_BUILD_BOARD_v2.png)]]
+== Податочни побарувања
+=== Ентитети
+* Ентитет **USER** - податоци за корсниците.
+    * Кандидат клучеви: Username. Поради чести промени на атрибутот, за примерен клуч избравме вештачки клуч Id.  
+	* Атрибути: 
+		* Username - текстуален податок,задолижетелен. 
+		* Description - текстуален податок,опционален.
+		* Password - текстуален податок,задолжителен. 
+		* Register_date - текстуален податок,задолжителен. 
+		* Sex - текстуален податок,опционален. 
+		* Is_active - булов податок, задолжителен. 
+        * Id - нумерички податок, задолжителен. 
+* Ентитет **DEVELOPER** - преклопувачка специјализација, со делумно учество, од USER. Ентитетов се однесува на корисниците, кои се истовремено и развивачи на софтвер.
+    *Кандидат клучеви: исто како и ентитетот USER и овај ентитет се идентификува со примарниот вештачки клуч Id. 
+* Ентитет **PROJECT_OWNER** - преклопувачка специјализација, со делумно учество, од DEVELOPER. Ентитетов се однесува на развивачите на софтвер, кои поседуваат проекти. 
+    *Кандидат клучеви: исто како и ентитетот DEVELOPER и овај ентитет се идентификува со примарниот вештачки клуч Id. 
+* Ентитет **MODERATOR** - преклопувачка специјализација, со делумно учество, од USER. Ентитетов се однесува на корисниците, кои истовремено се и модератори на threads.
+    *Кандидат клучеви: исто како и ентитетот USER и овај ентитет се идентификува со примарниот вештачки клуч Id. 
+* Ентитет **TAG** - податоци за можните тагови. Служат за групирање на thread.  
+    * Кандидат клучеви: Name, како податок уникат за секој таг. Истиот го избравме за примарен клуч на ентитетов. 
+	* Атрибути:
+		* Name - текстуален податок,задолжителен.   
+* Ентитет **THREAD** - генерализација на сите можни водови на threads. Ги содржи сличните податоци присутни кај поединечните видови.
+    * Кандидат клучеви: бидејќи најмално супер-клуч множество би се состоело од сите атрибути на ентитет, за примарен клуч избравме вештачки клуч Id. 
+    * Атрибути:
+        * Content - текстуален податок,задолжителен.
+        * Id - нумерички податок, задолжителен.
+* Ентитет **TOPIC_THREAD** - дисјунктна специјализација, со целосно учество, од THREAD. Ентитетов се однесува на сите threads кој се топици и ги содржи податоците специфични за нив.
+    * Кандидат клучеви: исто како и ентитетот THREAD и овај ентитет се идентификува со примарниот,вештачки клуч Id.
+    * Атрибути:
+        * Title - текстуален податок,задолжителен.
+        * Guidlines - json податок,задолжителен.
+* Ентитет **DISCUSSION_THREAD** - дисјунктна специјализација, со целосно учество, од THREAD. Ентитетов се однесува на сите threads кој се дискусии и ги содржи податоците специфични за нив.
+    * Кандидат клучеви: исто како и ентитетот THREAD и овај ентитет се идентификува со примарниот,вештачки клуч Id.
+* Ентитет **PROJECT_THREAD** - дисјунктна специјализација, со целосно учество, од THREAD. Ентитетов се однесува на сите threads кој се дискусии и ги содржи податоците специфични за нив.
+    * Кандидат клучеви: исто како и ентитетот THREAD и овај ентитет се идентификува со примарниот,вештачки клуч Id.
+    * Атрибути:
+        * Repo_url - текстуален податок, опционален.
+        * Title - текстуален податок,задолжителен.
+* Слаб ентитет **BLACKLISTED_USER** - податоци за тоа на кои корисници му е забранет пристапот во кои threads, од кои модератор.
+    * Кандидат клучеви: парцијалнен клуч Start_date, но за целосно идентификување се користат идентификувачките релации со THREAD,MODERATOR и USER. 
+    * Атрибути:
+        * Start_date - датум, задолжителен. 
+        * End_date - датум, опционален. 
+        * Reason - текстуален податок,задолжителен.
+* Слаб ентитет **REPORT** - податоци за извештаите, во врска со можни прекршување на правилата на соодветен thread, од страна на соодветни корсиници. 
+    * Кандидат клучеви: заради можноста да постојат повеќе извештаи, кои се однесуваат на истиот корсиник, за прекршувања на правилата на истиот thread, поднеси од страна на истиот корисник, одлучивме да генерираме вештачки парцијалнен клуч Id. За целосно идентификување на ентитетиве служат идентификувачките релации со THREAD и USER. 
+    * Атрибути:
+        * Id - нумерички, задолжителен. 
+        * Created_at - датум, задолжителен. 
+        * Status - енумерирачки, задолжителен. 
+        * Description - текстуален, задолжителен.     
+* Слаб ентитет **PROJECT_REQUEST** - податоци за сите барања за учество од страна на корисниците кон конкретен проект. 
+    * Кандидат клучеви: заради можноста еден корисник да испрати повеќе барања за учество кон ист проект, одлучивме да генерираме вештачки парцијалнен клуч Id. За целосно идентификување на ентитетиве служат идентификувачките релации со USER и PROJECT_THREAD.  
+    * Атрибути:
+        * Id - нумерички, задолжителен. 
+        * Status - енумерирачки, задолжителен. 
+        * Description - текстуален, задолжителен. 
+* Слаб ентитет **CHANNEL** - податоци за каналите во проектите. 
+    * Кандидат клучеви: парцијалниот клуч Name, целосно се идентификува преку идентификувачката релација со PROJECT_THREAD. 
+    * Атрибути:
+        * Name - текстуален, задолжителен.
+        * Description - текстуален, опционален.
+* Ентитет **CUSTOM_ROLE** - податоци за креирани улоги, кои се доделуваат на развивачите во конкретен проект. 
+    * Кандидат клучеви: парцијалниот клуч Name, целосно се идентификува преку идентификувачката релација со PROJECT_THREAD. 
+    * Атрибути:
+        * Name - текстуален,задолжителен.
+* Ентитет **PERMISSIONS** - податоци за пермисиите, кои се достапни во дефинирањето на улогите во пеодиенчните проекти.
+    * Кандидат клучеви: Name, како податок уникат за секојa пермисија. Истиот го избравме за примарен клуч на ентитетов. 
+    * Атрибути:
+        * Name - текстуален,задолжителен.
+=== Релации 
+* **IS_MODERATED_BY**(N:M) - релација помеѓу TOPIC_THREAD и MODERATOR. Ни кажува кои се модератори на соодветниот TOPIC_THREAD.  
+* **IS_CHILD_TO**(1:N) - релација помеѓу TOPIC_THREAD и TOPIC_THREAD. Ни опишува како се разделува општ топик на поспецифички топици.  
+* **CONTAINS**(1:N) - релација помеѓу TOPIC_THREAD и DISCUSSION_THREAD. Ни ги претставува дискусиите започнатите во топикот.  
+* **BELONGS_TO**(1:N) - релацијата помеѓу PROJECT_THREAD и TOPIC_THREAD. Ни кажува кои топици се започнатите во соодветниот проект. 
+* **REPLIES**(1:N)  - релација помеѓу DISCUSSION_THREAD и DISCUSSION_THREAD. Ни кажува кои дискусии се произлегле од соодветна дискусија.
+* **ASSIGNED_TO**(N:M) - релација помеѓу THREAD и TAG. Ни кажува кои се таговите на соодветниот thread.
+* **CREATES**(1:N)  - релација помеѓу MODERATOR и TAG. Ни кажува кои тагови ги креирал соодветниот модератор. 
+* **BLACKLISTED_BY**(1:N)  - релација помеѓу MODERATOR и BLACKLISTED_USER. Ни кажува кој модератор го ставил кој корисник на 'blacklist'. 
+* **BLACKLISTED_FROM**(1:N) - релација помеѓу THREAD и BLACKLISTED_USER. Ни кажува во кој theads е "blacklisted" корисникот. 
+* **REFERS_TO**(1:N) - релација помеѓу USER и BLACKLISTED_USER. Ни кажува на кој корисник се однесува соодветниот запис во BLACKLISTED_USER.  
+* **FOR_MISCONDUCT**(1:N) - релација помеѓу THREAD и REPORT. Ни кажува во кој и на кој thread правилата се прекршиле. 
+* **ABOUT**(1:N) - релација помеѓу USER и REPORT. Ни кажува кој корисник е обвинет за прекршување на правилата. 
+* **SUBMITTED_BY**(1:N) - релација помеѓу USER и REPORT. Ни кажува кој корисник го поднесол извештајот. 
+* **LIKES**(N:M) - релација помеѓу USER и THREAD. Ни ги претставува сите threads, кој му се допаднале на корисникот. 
+* **SUBMITS**(1:N) - релација помеѓу USER и PROJECT_REQUEST. Ни кажува кој корисник го поднел соодветното барање за учество. 
+* **RECIEVES**(1:N) - релација помеѓу PROJECT_THREAD и PROJECT_REQUEST. Ни кажува за кој проект, корисникот го поднел соодветното барање за учество.  
+* **VALID_IN**(1:N) - релација помеѓу PROJECT_THREAD и CUSTOM_ROLE. Ни кажува во кој проект е валидна соодветната улога. 
+* **HAS**(1:N) - релација помеѓу PROJECT_THREAD и CHANNEL. Ни кажува во кој проект припаѓа соодветниот канал. 
+* **ASSOCIATED_WITH**(N:M) - релација помеѓу PROJECT_THREAD и DEVELOPER. Ни кажува во кој проекти учествувал/учествува соодветниот програмер. 
+    * Атрибути:
+        * Started_involvment_at - датум, задолжителен. 
+        * Ended_involment_at - датум, опционален. 
+* **DEFINED_BY**(N:M) - релација помеѓу CUSTOM_ROLE и PERMISSIONS. Ни кажува кој пермисии ги опфаќа соодветната улога. 
+* **CONSTRUCTS**(N:M) - релација помеѓу CHANNEL и DEVELOPER. Ни кажува кој програмер го креирал соодветниот канал. 
+* **SEND_MESSAGE_IN**(N:M) - релација помеѓу CHANNEL и DEVELOPER. Ни претставува кој програмер испратил порака во соодветниот канал. 
+    * Атрибути
+        * Timestamp - датум, задолжителен. 
+        * Msg_txt - текстуален, задолжителен. 
+* **IS_ASSIGNED**(N:M) - релација помеѓу CUSTOM_ROLE и DEVELOPER. Ни кажува кој улоги ги поседува соодветниот програмер. 
+=== Историјат
+
+
+
Index: docs/RelationalSchema.txt
===================================================================
--- docs/RelationalSchema.txt	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ docs/RelationalSchema.txt	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,103 @@
+## Relational Schema
+
+1. **users** (_**username**_, is_activate, password, description, registered_at, sex)
+
+2. **moderator** (_**username#(users)**_) [inherits users]
+
+3. **developer** (_**username#(users)**_) [inherits users]
+
+4. **project_manager** (_**username#(users)**_) [inherits users]
+
+5. **thread** (_**id**_, description, logo_url, title, username#(users))
+
+6. **likes** (_**username#(users)**_, _**thread_id#(thread)**_)
+
+7. **threads_moderators** (_**thread_id#(thread)**_, _**username#(users)**_)
+
+8. **tag** (_**name**_)
+
+9. **tag_threads** (_**thread_id#(thread)**_, _**tag_name#(tag)**_)
+
+10. **topic_thread** (_**id**_, description, logo_url, title, username#(users), guidelines, next_discussion_id) [inherits thread]
+
+11. **project_thread** (_**id**_, description, logo_url, title, username#(users), repo_url) [inherits thread]
+
+12. **discussion_thread** (_**id**_, _**topic_id#(thread)**_, text, created_by_user#(users), reply_discussion, reply_topic_id)
+
+13. **topic_belongs_to_project** (_**topic_id#(thread)**_, _**project_id#(thread)**_)
+
+14. **topic_blacklist** (_**username#(users)**_, _**project_id#(users)**_)
+
+15. **developer_associated_with_project** (_**project_id#(thread)**_, _**developer#(users)**_, _**started_at**_, ended_at)
+
+16. **permissions** (_**name**_)
+
+17. **project_roles** (_**name**_, _**project_id#(thread)**_, description)
+
+18. **users_project_roles** (_**username#(users)**_, _**project_id#(thread)**_, _**role_name#(project_roles)**_)
+
+19. **project_roles_permissions** (_**permission_name#(permissions)**_, _**role_name#(project_roles)**_, _**project_id#(thread)**_)
+
+20. **project_request** (_**id**_, reason, status, submited_by_user#(users), for_project#(thread))
+
+21. **report** (_**id**_, created_at, description, status, thread_id#(thread), for_user#(users), by_user#(users))
+
+22. **channel** (_**name**_, description, logo_url, _**project_id#(thread)**_, developer#(users))
+
+23. **messages** (_**sent_at**_, content, _**sent_by#(users)**_, _**project_id#(thread)**_, _**channel_name#(channel)**_)
+
+
+
+
+V2
+
+
+## Relational Schema
+
+1. **users** (_**username**_, is_activate, password, description, registered_at, sex)
+
+2. **moderator** (_**username#(users)**_)
+
+3. **developer** (_**username#(users)**_)
+
+4. **project_manager** (_**username#(users)**_)
+
+5. **thread** (_**id**_, content, _**username#(users)**_)
+
+6. **likes** (_**username#(users)**_, _**thread_id#(thread)**_)
+
+7. **topic_threads_moderators** (_**thread_id#(thread)**_, _**username#(users)**_)
+
+8. **tag** (_**name**_)
+
+9. **tag_threads** (_**thread_id#(thread)**_, _**tag_name#(tag)**_)
+
+10. **topic_thread** (_**id#(thread)**_, title, guidelines, next_discussion_id, parent_topic_id#(thread))
+
+11. **topic_belongs_to_project** (_**topic_id#(thread)**_, _**project_id#(thread)**_)
+
+12. **topic_blacklist** (_**topic_id#(thread)**_, _**username#(users)**_, _**moderator#(users)**_)
+
+13. **project_thread** (_**id#(thread)**_, title, repo_url)
+
+14. **discussion_thread** (_**id#(thread)**_, _**created_by_user#(users)**_, reply_discussion_id#(thread), topic_id#(thread))
+
+15. **developer_associated_with_project** (_**project_id#(thread)**_, _**developer#(users)**_, _**started_at**_, ended_at)
+
+16. **permissions** (_**name**_)
+
+17. **project_roles** (_**name**_, _**project_id#(thread)**_, description)
+
+18. **users_project_roles** (_**username#(users)**_, _**project_id#(thread)**_, _**role_name#(project_roles)**_)
+
+19. **project_roles_permissions** (_**permission_name#(permissions)**_, _**role_name#(project_roles)**_, _**project_id#(thread)**_)
+
+20. **project_request** (_**id**_, description, status, _**submited_by_user#(users)**_, _**project_id#(thread)**_)
+
+21. **report** (_**id**_, created_at, description, status, _**thread_id#(thread)**_, _**for_user#(users)**_, _**by_user#(users)**_)
+
+22. **channel** (_**name**_, description, logo_url, _**project_id#(thread)**_, _**developer#(users)**_)
+
+23. **messages** (_**sent_at**_, content, _**sent_by#(users)**_, _**project_id#(thread)**_, _**channel_name#(channel)**_)
+
+
Index: docs/UseCase.txt
===================================================================
--- docs/UseCase.txt	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ docs/UseCase.txt	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,59 @@
+Use Cases
+
+User
+	- Kreirat topic.
+	- Kreirat discussion thread vo topic thread.
+	- Pravi reply na discussion thread.
+	- Stava like na thread. 
+	- Korisnik prijavuva drug korisnik za nesoodvetno odnesuvanje. 
+	- Korisnikot se prijavuva za uchestvo vo proekt.
+	- Referencira drug thread.
+	
+Moderator
+	- Nadgleduvat odreden Topic/Project thraed.
+	- Dodavat/Kreirat tagoj na dadeni topics. 
+	- Otstranuvat korisnik od topicot. 
+	
+Developer
+	- Kreirat kanal vo project.
+	- Pisuva poraka vo kanal.
+
+Project Owner
+	- Odobruva ili odbiva baranja za ucestvo vo negoviot proekt.
+	- Otstranuva developer od proekt.
+	- Kreira roles za daden proekt
+	- Dodava roles na daden developer
+	
+	
+SQL ideas
+	
+	- Site replies na daden thread t
+	- Site replies na daden thread t do dadeno nivo n - (primer ako imas thread -> reply1 -> reply2 -> reply3 -> reply2a, da gi prikazis site threads do reply2 i reply2a (ova znacit deka sa na isto nivo), znacit ke gi imas: thread -> reply1 -> reply2 -> reply2a. )
+	- Site vgnezdeni topic threads vo daden root topic thread t
+	- Kolku pati daden user u bil blacklistnat od nekoj topic/ project i/ili globalno od koj bilo
+	- Broj na replies na daden discussion thread ( ke trebit za sortiranje )
+	- Broj na likes na daden discussion thread.
+	- Broj na useri vo daden topic t (spored liked relacijata mozit ova da sa presmetat)
+	- Broj na reports so imat user submitnato vkupno
+	- Broj na reports so sa imat podneseno protiv daden user u
+	- Site developeri vo daden proekt so dadena permisija p - (primer za kreiranje kanali)
+	- Vo kolku proekti imat ucestvuvano daden developer d.
+	- Od proektite so ucestvuval, vo koj najdolgo ucestvuval daden developer d.
+	- Site poraki od daden developer vo daden kanal ili od site kanali
+	- Search spored content na poraka vo kanal
+	- Koi developers imat vo proekt p
+	//- Kolku razlicni developeri blacklistnal proektot p.
+	- Kolu pati daden developer d imat ucevstvuvano vo proekt p (primer ako zaprit pa pak vlezit pa pak...)
+	- Kolku kanali imat kreirano daden developer d (mozda za badge)
+	- Kolku useri vlegle vo proekt p vo daden interval na vreme i.
+	
+	
+	--- Ideja za achievements
+		Sekoj user so nad N likes na nekoj discussion thread vo daden topic thread da dobiet nekakov achievement(badge)
+		Developer so ucestvuval vo nad N proekti nekoj badge
+		
+		
+		
+
+
+	 
Index: docs/buildboard-ddl.sql
===================================================================
--- docs/buildboard-ddl.sql	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ docs/buildboard-ddl.sql	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,318 @@
+--- Trigger before update/insert za check na iminjata topic/discussion -> OK
+--- Trigger za ko ke adnit dete na topic thread sho e vo proekt, da go dodajt kako belongs_to vo proektot
+--- Trigger za check dali reply na discussion thread pripagjat na ist topic thread kako na toj so mu pret reply
+--- IMENUVANJE: triggeri so provervat nesto prefix = check, funkcii za istite prefix = validate
+--- Nemame contraint sho velit deka sekoj topic thread trebat da e moderiran
+DROP TABLE IF EXISTS users CASCADE;
+DROP TABLE IF EXISTS moderator CASCADE;
+DROP TABLE IF EXISTS developer CASCADE;
+DROP TABLE IF EXISTS project_manager CASCADE;
+DROP TABLE IF EXISTS thread CASCADE;
+DROP TABLE IF EXISTS likes CASCADE;
+DROP TABLE IF EXISTS topic_threads_moderators CASCADE;
+DROP TABLE IF EXISTS tag CASCADE;
+DROP TABLE IF EXISTS tag_threads CASCADE;
+DROP TABLE IF EXISTS topic_thread CASCADE;
+DROP TABLE IF EXISTS topic_belongs_to_project CASCADE;
+DROP TABLE IF EXISTS blacklisted_user CASCADE;
+DROP TABLE IF EXISTS project_thread CASCADE;
+DROP TABLE IF EXISTS discussion_thread CASCADE;
+DROP TABLE IF EXISTS developer_associated_with_project CASCADE;
+DROP TABLE IF EXISTS permissions CASCADE;
+DROP TABLE IF EXISTS project_roles CASCADE;
+DROP TABLE IF EXISTS users_project_roles CASCADE;
+DROP TABLE IF EXISTS project_roles_permissions CASCADE;
+DROP TABLE IF EXISTS project_request CASCADE;
+DROP TABLE IF EXISTS report CASCADE;
+DROP TABLE IF EXISTS channel CASCADE;
+DROP TABLE IF EXISTS messages CASCADE;
+DROP TABLE IF EXISTS threads_moderators CASCADE;
+DROP TYPE IF EXISTS status;
+DROP VIEW IF EXISTS v_topic_thread CASCADE;
+DROP VIEW IF EXISTS v_project_thread CASCADE;
+DROP VIEW IF EXISTS v_discussion_thread CASCADE;
+DROP VIEW IF EXISTS v_developer CASCADE;
+DROP VIEW IF EXISTS v_project_owner CASCADE;
+DROP VIEW IF EXISTS v_moderator CASCADE;
+DROP FUNCTION IF EXISTS fn_project_insert_child_topic CASCADE;
+DROP FUNCTION IF EXISTS fn_validate_same_parent CASCADE;
+DROP TRIGGER IF EXISTS validate_same_parent ON discussion_thread CASCADE;
+---- DDL
+CREATE TABLE users
+(
+    id            SERIAL PRIMARY KEY,
+    username      VARCHAR(32) UNIQUE NOT NULL,
+    is_activate   bool,
+    password      VARCHAR(72),
+    description   VARCHAR(200),
+    registered_at TIMESTAMP,
+    sex           VARCHAR(1)
+);
+CREATE TABLE moderator
+(
+    id INT PRIMARY KEY REFERENCES users (id)  on delete cascade
+);
+CREATE TABLE developer
+(
+    id INT PRIMARY KEY REFERENCES users (id)  on delete cascade
+);
+CREATE TABLE project_manager
+(
+    id INT PRIMARY KEY REFERENCES users (id)  on delete cascade
+);
+CREATE TABLE thread
+(
+    id      SERIAL PRIMARY KEY,
+    content TEXT,
+    user_id INT REFERENCES users (id) NOT NULL
+);
+CREATE TABLE topic_thread
+(
+    title           VARCHAR(32) NOT NULL,
+    guidelines      jsonb,
+    parent_id INT REFERENCES thread (id),
+    id              INT PRIMARY KEY REFERENCES thread (id) on delete cascade
+);
+CREATE TABLE discussion_thread
+(
+    parent_id           INT REFERENCES thread (id) NOT NULL,
+    id                  INT PRIMARY KEY REFERENCES thread (id) on delete cascade
+);
+CREATE TABLE project_thread
+(
+    title    VARCHAR(32) NOT NULL,
+    repo_url TEXT,
+    id       INT PRIMARY KEY REFERENCES thread (id) on delete cascade
+);
+CREATE TABLE likes
+(
+    user_id   INT REFERENCES users (id),
+    thread_id INT REFERENCES thread (id),
+    PRIMARY KEY (user_id, thread_id)
+);
+CREATE TABLE topic_threads_moderators
+(
+    thread_id INT REFERENCES thread (id) ON DELETE CASCADE,
+    user_id   INT REFERENCES users (id) ON DELETE CASCADE,
+    PRIMARY KEY (thread_id, user_id)
+);
+CREATE TABLE tag
+(
+    name VARCHAR(64) PRIMARY KEY
+);
+CREATE TABLE tag_threads
+(
+    thread_id INT REFERENCES thread (id),
+    tag_name  VARCHAR(64) REFERENCES tag (name),
+    PRIMARY KEY (thread_id, tag_name)
+);
+
+CREATE TABLE topic_belongs_to_project
+(
+    topic_id   INT REFERENCES thread (id) ON DELETE CASCADE,
+    project_id INT REFERENCES thread (id) ON DELETE CASCADE,
+    PRIMARY KEY (topic_id, project_id)
+);
+CREATE TABLE blacklisted_user
+(
+    topic_id     INT REFERENCES thread (id) ON DELETE CASCADE,
+    user_id      INT REFERENCES users (id) ON DELETE CASCADE,
+    moderator_id INT REFERENCES users (id) ON DELETE CASCADE,
+    start_date   TIMESTAMP,
+    end_date     TIMESTAMP,
+    reason       TEXT,
+    PRIMARY KEY (user_id, moderator_id, topic_id, start_date)
+);
+
+CREATE TABLE developer_associated_with_project
+(
+    project_id   INT REFERENCES thread (id),
+    developer_id INT REFERENCES users (id),
+    started_at   TIMESTAMP,
+    ended_at     TIMESTAMP,
+    PRIMARY KEY (project_id, developer_id, started_at)
+);
+CREATE TABLE permissions
+(
+    name VARCHAR(32) PRIMARY KEY
+);
+CREATE TABLE project_roles
+(
+    name        VARCHAR(32),
+    project_id  INT REFERENCES thread (id) ON DELETE CASCADE,
+    description TEXT,
+    PRIMARY KEY (name, project_id)
+);
+CREATE TABLE users_project_roles
+(
+    user_id    INT REFERENCES users (id),
+    project_id INT,
+    role_name  VARCHAR(32),
+    FOREIGN KEY (role_name, project_id)
+        REFERENCES project_roles (name, project_id),
+    PRIMARY KEY (user_id, project_id, role_name)
+);
+CREATE TABLE project_roles_permissions
+(
+    permission_name VARCHAR(32) REFERENCES permissions (name),
+    role_name       VARCHAR(32),
+    project_id      INT,
+    PRIMARY KEY (permission_name, role_name, project_id),
+    FOREIGN KEY (role_name, project_id)
+        REFERENCES project_roles (name, project_id)
+);
+CREATE TYPE status AS ENUM ('ACCEPTED', 'DENIED', 'PENDING');
+CREATE TABLE project_request
+(
+    id          SERIAL PRIMARY KEY,
+    description VARCHAR(200),
+    status      status                     NOT NULL,
+    user_id     INT REFERENCES users (id)  NOT NULL,
+    project_id  INT REFERENCES thread (id) NOT NULL
+);
+CREATE TABLE report
+(
+    id          SERIAL,
+    created_at  TIMESTAMP,
+    description VARCHAR(200) NOT NULL,
+    status      status,
+    thread_id   INT REFERENCES thread (id),
+    for_user_id INT REFERENCES users (id),
+    by_user_id  INT REFERENCES users (id),
+    PRIMARY KEY (id, thread_id, for_user_id, by_user_id)
+);
+CREATE TABLE channel
+(
+    name         VARCHAR(64),
+    description  VARCHAR(200),
+    project_id   INT REFERENCES thread (id) ON DELETE CASCADE,
+    developer_id INT REFERENCES users (id),
+    PRIMARY KEY (name, project_id)
+);
+CREATE TABLE messages
+(
+    sent_at      TIMESTAMP,
+    content      VARCHAR(200) NOT NULL,
+    sent_by      INT REFERENCES users (id),
+    project_id   INT,
+    channel_name VARCHAR(64),
+    FOREIGN KEY (channel_name, project_id)
+        REFERENCES channel (name, project_id) ON DELETE CASCADE,
+    PRIMARY KEY (channel_name, project_id, sent_at, sent_by)
+);
+------------------------VIEWS-----------------------------
+CREATE OR REPLACE VIEW v_project_thread
+AS
+SELECT thread.id, content, user_id, title, repo_url
+FROM project_thread project
+         JOIN thread
+              ON project.id = thread.id;
+CREATE OR REPLACE VIEW v_discussion_thread
+AS
+SELECT thread.id, content, user_id,parent_id
+FROM discussion_thread discussion
+         JOIN thread
+              ON discussion.id = thread.id;
+CREATE OR REPLACE VIEW v_topic_thread
+AS
+SELECT thread.id, content, user_id, title, guidelines, parent_id
+FROM topic_thread topic
+         JOIN thread
+              ON topic.id = thread.id;
+CREATE OR REPLACE VIEW v_moderator
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM moderator
+         JOIN users ON moderator.id = users.id;
+
+CREATE OR REPLACE VIEW v_developer
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM developer
+         JOIN users ON developer.id = users.id;
+CREATE OR REPLACE VIEW v_project_owner
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM project_manager
+         JOIN users ON project_manager.id = users.id;
+CREATE OR REPLACE VIEW v_moderator
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM moderator
+         JOIN users ON moderator.id = users.id;
+
+CREATE OR REPLACE VIEW v_developer
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM developer
+         JOIN users ON developer.id = users.id;
+CREATE OR REPLACE VIEW v_project_owner
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM project_manager
+         JOIN users ON project_manager.id = users.id;
+-------------------------- FUNCTIONS ----------------------
+CREATE OR REPLACE FUNCTION fn_validate_topic_title()
+    RETURNS TRIGGER
+    LANGUAGE plpgsql
+AS
+$$
+BEGIN
+    IF new.title IN
+       (SELECT title
+        FROM topic_thread
+                 AS t
+        WHERE t.parent_id = new.parent_id OR (t.parent_id IS NULL AND new.parent_id IS NULL))
+    THEN
+        RAISE EXCEPTION 'There already exists a topic with title % in parent topic with id %',new.title,new.parent_id;
+END IF;
+RETURN new;
+END;
+$$;
+CREATE OR REPLACE FUNCTION fn_insert_topics_creator_as_moderator()
+    RETURNS TRIGGER
+    LANGUAGE plpgsql
+AS
+$$
+DECLARE
+v_user_id INT;
+BEGIN
+SELECT v_topic_thread.user_id
+INTO v_user_id
+FROM v_topic_thread
+WHERE v_topic_thread.id = new.id;
+INSERT INTO topic_threads_moderators(thread_id, user_id) VALUES (new.id, v_user_id);
+RETURN NEW;
+END;
+$$;
+
+CREATE OR REPLACE FUNCTION fn_insert_project_manager()
+RETURNS TRIGGER
+LANGUAGE plpgsql
+AS
+    $$
+    DECLARE usrId INT;
+BEGIN
+SELECT user_id INTO usrId FROM v_project_thread p WHERE NEW.id = p.id;
+INSERT INTO developer VALUES (usrId);
+INSERT INTO project_manager VALUES (usrId);
+RETURN NEW;
+END;
+    $$;
+-------------------------- TRIGGERS ----------------------
+CREATE OR REPLACE TRIGGER tr_check_topic_name
+    BEFORE INSERT OR UPDATE
+                                ON topic_thread
+                                FOR EACH ROW
+                                EXECUTE FUNCTION fn_validate_topic_title();
+CREATE OR REPLACE TRIGGER tr_insert_topics_creator_as_moderator
+    AFTER INSERT
+    ON topic_thread
+    FOR EACH ROW
+EXECUTE FUNCTION fn_insert_topics_creator_as_moderator();
+CREATE OR REPLACE TRIGGER tr_insert_project_manager
+    AFTER INSERT
+    ON project_thread
+    FOR EACH ROW
+    EXECUTE FUNCTION fn_insert_project_manager();
+
Index: docs/test-data.sql
===================================================================
--- docs/test-data.sql	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ docs/test-data.sql	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,110 @@
+INSERT INTO users (username, is_activate, password, description, registered_at, sex)
+VALUES
+    ('user1', true, '$2a$12$0f.x7aBM2wFBZBXoLPj0BObVsk.J1kXFYo5nb4niAWkI4hk5tHvDy', 'First user', NOW(), 'M'),
+    ('user2', true, '$2a$12$VkR0a47LDVM6aUqFcEJGSu9jhZCz.05tCoyiRicFObt4f2x2gijKa', 'Second user', NOW(), 'F'),
+    ('user3', true, '$2a$12$eSLdHHJ1KFgv.dOupmloXeItjrt2o1IB6ER6Nq7WYj9Jfr2bEwK2a', 'Third user', NOW(), 'M'),
+    ('user4', true, '$2a$12$dF5SXcNhMulgU3Qre3nh1e.aatRiJZsnfoBSqReGnXe9rIbHYVWhe', 'Fourth user', NOW(), 'F'),
+    ('user5', true, '$2a$12$zHrloz8WG2zo5S6MTf1C0ez1raMlmDJdB8OOa2I1S2pVy9oI76YTa', 'Fifth user', NOW(), 'M');
+
+INSERT INTO thread (content, user_id)
+VALUES
+    ('Main content for topic thread 1', 1),
+    ('Main content for topic thread 2', 2),
+    ('Discussion content for topic 1', 1),
+    ('Discussion content for topic 2', 2),
+    ('Project-specific thread content', 3),
+    ('Reply to topic 1', 4),
+    ('Further discussion on topic 2', 5);
+
+INSERT INTO topic_thread (id, title, guidelines, parent_id)
+VALUES
+    (1, 'Topic 1', '{"rule1": "Follow guidelines"}', NULL),
+    (2, 'Topic 2', '{"rule2": "Be respectful"}', NULL);
+
+INSERT INTO discussion_thread (id, parent_id)
+VALUES
+    (3, 1),
+    (4, 2),
+    (6, 3),
+    (7, 4);
+
+INSERT INTO project_thread (id, title, repo_url)
+VALUES
+    (5, 'Project 1 Thread', 'http://github.com/project1');
+
+INSERT INTO likes (user_id, thread_id)
+VALUES
+    (1, 3),
+    (2, 4),
+    (3, 5),
+    (4, 6),
+    (5, 7);
+
+INSERT INTO tag (name)
+VALUES
+    ('Tag1'),
+    ('Tag2'),
+    ('Tag3');
+
+INSERT INTO tag_threads (thread_id, tag_name)
+VALUES
+    (1, 'Tag1'),
+    (3, 'Tag2'),
+    (5, 'Tag3'),
+    (6, 'Tag1');
+
+INSERT INTO topic_belongs_to_project (topic_id, project_id)
+VALUES
+    (1, 5),
+    (2, 5);
+
+INSERT INTO blacklisted_user (topic_id, user_id, moderator_id, start_date, end_date, reason)
+VALUES
+    (1, 2, 1, NOW(), NOW() + INTERVAL '7 days', 'Spamming'),
+    (2, 3, 4, NOW(), NOW() + INTERVAL '3 days', 'Offensive language');
+
+INSERT INTO developer_associated_with_project (project_id, developer_id, started_at)
+VALUES
+    (5, 2, NOW()),
+    (5, 3, NOW());
+
+INSERT INTO permissions (name)
+VALUES
+    ('Create Thread'),
+    ('Delete Thread');
+
+INSERT INTO project_roles (name, project_id, description)
+VALUES
+    ('Admin', 5, 'Admin role for the project'),
+    ('Developer', 5, 'Developer role for the project');
+
+INSERT INTO users_project_roles (user_id, project_id, role_name)
+VALUES
+    (3, 5, 'Admin'),
+    (2, 5, 'Developer'),
+    (4, 5, 'Developer');
+
+INSERT INTO project_roles_permissions (permission_name, role_name, project_id)
+VALUES
+    ('Create Thread', 'Admin', 5),
+    ('Delete Thread', 'Admin', 5);
+
+INSERT INTO project_request (description, status, user_id, project_id)
+VALUES
+    ('Request to join Project 1', 'PENDING', 2, 5),
+    ('Request to join Project 1', 'ACCEPTED', 4, 5);
+
+INSERT INTO report (created_at, description, status, thread_id, for_user_id, by_user_id)
+VALUES
+    (NOW(), 'Inappropriate content', 'PENDING', 3, 2, 1),
+    (NOW(), 'Spam content', 'DENIED', 6, 4, 3);
+
+INSERT INTO channel (name, description, project_id, developer_id)
+VALUES
+    ('General', 'General discussion channel', 5, 2),
+    ('Updates', 'Project updates channel', 5, 3);
+
+INSERT INTO messages (sent_at, content, sent_by, project_id, channel_name)
+VALUES
+    (NOW(), 'Hello, team!', 2, 5, 'General'),
+    (NOW(), 'We need to push the deadline.', 3, 5, 'Updates');
Index: docs/versioning/er_models/ER_BUILD_BOARD_v1.xml
===================================================================
--- docs/versioning/er_models/ER_BUILD_BOARD_v1.xml	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ docs/versioning/er_models/ER_BUILD_BOARD_v1.xml	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,1 @@
+<drawing><figures><ent id="0"><children><r id="1" x="678" y="97" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="2" x="694.9358444213867" y="108.82794284820557"><a><text><string>THREAD</string></text></a></t></children></ent><disjuncao id="3"><children><circ id="4" x="725" y="181" w="20" h="20"><a><fillColor><color rgba="#fff5f2e0"/></fillColor></a></circ><tn id="5" x="729" y="182"><a><fontBold><boolean>true</boolean></fontBold><fontSize><double>16</double></fontSize><text><string>d</string></text></a></tn></children></disjuncao><ent id="6"><children><r id="7" x="1021" y="268" w="127.572265625" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="8" x="1034.9077911376953" y="279.82794284820557"><a><text><string>PROJECT_THREAD</string></text></a></t></children></ent><ent id="9"><children><r id="a" x="282" y="240" w="127.572265625" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="b" x="302.579833984375" y="251.82794284820557"><a><text><string>TOPIC_THREAD</string></text></a></t></children></ent><entfraca id="c"><children><r id="d" x="190" y="479" w="150.4765625" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="e" x="203.755859375" y="490.82794284820557"><a><text><string>DISCUSSION_THREAD</string></text></a></t></children></entfraca><relfraco id="f"><children><diamond id="10" x="212" y="351" w="131" h="56"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="11" x="247.40377807617188" y="370.82794284820557"><a><text><string>CONTAINS</string></text></a></t></children></relfraco><llabelDoubleMuitos id="12"><points><p colinear="true" x="274.63893229166666" y="407" c1x="272" c1y="-313" c2x="272" c2y="-313"/><p colinear="true" x="267.2819010416667" y="479" c1x="272" c1y="-313" c2x="272" c2y="-313"/></points><startConnector><rConnector id="13"><Owner><relfraco ref="f"/></Owner></rConnector></startConnector><endConnector><rConnector id="14"><Owner><entfraca ref="c"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="15"><points><p colinear="true" x="293.5673253676471" y="351" c1x="487" c1y="-65" c2x="487" c2y="-65"/><p colinear="true" x="334.3094718356092" y="280" c1x="487" c1y="-65" c2x="487" c2y="-65"/></points><startConnector><rConnector id="16"><Owner><relfraco ref="f"/></Owner></rConnector></startConnector><endConnector><rConnector id="17"><Owner><ent ref="9"/></Owner></rConnector></endConnector></llabelUm><generalizacaoLine id="18"><points><p colinear="true" x="725" y="194.13295836696986" c1x="468" c1y="-102" c2x="468" c2y="-102"/><p colinear="true" x="409.572265625" y="248.9207536192405" c1x="468" c1y="-102" c2x="468" c2y="-102"/></points><startConnector><rConnector id="19"><Owner><disjuncao ref="3"/></Owner></rConnector></startConnector><endConnector><rConnector id="1a"><Owner><ent ref="9"/></Owner></rConnector></endConnector></generalizacaoLine><generalizacaoLine id="1b"><points><p colinear="true" x="745" y="195.12923420298716" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="1021" y="270.5658953398321" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="1c"><Owner><disjuncao ref="3"/></Owner></rConnector></startConnector><endConnector><rConnector id="1d"><Owner><ent ref="6"/></Owner></rConnector></endConnector></generalizacaoLine><rel id="1e"><children><diamond id="1f" x="660" y="246" w="109" h="44"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="20" x="676.5257339477539" y="259.82794284820557"><a><text><string>BELONGS_TO</string></text></a></t></children></rel><llabelUm id="21"><points><p colinear="true" x="769" y="270.94366951233343" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="1021" y="284.5547652390861" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="22"><Owner><rel ref="1e"/></Owner></rConnector></startConnector><endConnector><rConnector id="23"><Owner><ent ref="6"/></Owner></rConnector></endConnector></llabelUm><llabelMuitos id="24"><points><p colinear="true" x="660" y="266.8175112497782" c1x="468" c1y="-102" c2x="468" c2y="-102"/><p colinear="true" x="409.572265625" y="261.3839703572649" c1x="468" c1y="-102" c2x="468" c2y="-102"/></points><startConnector><rConnector id="25"><Owner><rel ref="1e"/></Owner></rConnector></startConnector><endConnector><rConnector id="26"><Owner><ent ref="9"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><ent id="27"><children><r id="28" x="702" y="422" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="29" x="727.2518997192383" y="433.82794284820557"><a><text><string>USER</string></text></a></t></children></ent><llabelDoubleGeneralizacao id="2a" labelGeneralizacaoText="caracteristica"><points><p colinear="true" x="732.4304695845387" y="181" c1x="330.38610724041155" c1y="-41" c2x="330.38610724041155" c2y="-41"/><p colinear="true" x="722.5095217451683" y="137" c1x="330.38610724041155" c1y="-41" c2x="330.38610724041155" c2y="-41"/></points><startConnector><rConnector id="2b"><Owner><disjuncao ref="3"/></Owner></rConnector></startConnector><endConnector><rConnector id="2c"><Owner><ent ref="0"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleGeneralizacao><sobreposicao id="2d"><children><circ id="2e" x="849" y="541" w="20" h="20"><a><fillColor><color rgba="#fff5f2e0"/></fillColor></a></circ><tn id="2f" x="853" y="542"><a><fontBold><boolean>true</boolean></fontBold><fontSize><double>16</double></fontSize><text><string>o</string></text></a></tn></children></sobreposicao><lcaf id="30"><points><p colinear="true" x="849" y="542.9604644204817" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="763.196415966227" y="462" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="31"><Owner><sobreposicao ref="2d"/></Owner></rConnector></startConnector><endConnector><rConnector id="32"><Owner><ent ref="27"/></Owner></rConnector></endConnector></lcaf><ent id="33"><children><r id="34" x="848" y="653" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="35" x="854.8197708129883" y="664.8279428482056"><a><text><string>DEVELOPER</string></text></a></t></children></ent><generalizacaoLine id="36"><points><p colinear="true" x="861.7402465366059" y="563.7920436859131" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="883.1908717368779" y="653" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="37"><Owner><sobreposicao ref="2d"/></Owner></rConnector></startConnector><endConnector><rConnector id="38"><Owner><ent ref="33"/></Owner></rConnector></endConnector></generalizacaoLine><rel id="39"><children><diamond id="3a" x="1038" y="455" w="107.087890625" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="3b" x="1049.8016510009766" y="466.82794284820557"><a><text><string>INVLOVLED_IN</string></text></a></t></children></rel><llabelDoubleMuitos id="3c"><points><p colinear="true" x="1090.8211846173128" y="455" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="1085.5088935076872" y="308" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="3d"><Owner><rel ref="39"/></Owner></rConnector></startConnector><endConnector><rConnector id="3e"><Owner><ent ref="6"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><ent id="3f"><children><r id="40" x="1331" y="709" w="130" h="41"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="41" x="1340.0795974731445" y="721.3279428482056"><a><text><string>PROJECT_MANAGER</string></text></a></t></children></ent><sobreposicao id="42"><children><circ id="43" x="1183" y="773" w="20" h="20"><a><fillColor><color rgba="#fff5f2e0"/></fillColor></a></circ><tn id="44" x="1187" y="774"><a><fontBold><boolean>true</boolean></fontBold><fontSize><double>16</double></fontSize><text><string>o</string></text></a></tn></children></sobreposicao><generalizacaoLine id="45"><points><p colinear="true" x="1203" y="781.6917843137469" c1x="-12" c1y="488" c2x="-12" c2y="488"/><p colinear="true" x="1331" y="747.077543939863" c1x="-12" c1y="488" c2x="-12" c2y="488"/></points><startConnector><rConnector id="46"><Owner><sobreposicao ref="42"/></Owner></rConnector></startConnector><endConnector><rConnector id="47"><Owner><ent ref="3f"/></Owner></rConnector></endConnector></generalizacaoLine><lcaf id="48"><points><p colinear="true" x="928" y="687.6093143400599" c1x="-12" c1y="488" c2x="-12" c2y="488"/><p colinear="true" x="1183" y="780.7436932579416" c1x="-12" c1y="488" c2x="-12" c2y="488"/></points><startConnector><rConnector id="49"><Owner><ent ref="33"/></Owner></rConnector></startConnector><endConnector><rConnector id="4a"><Owner><sobreposicao ref="42"/></Owner></rConnector></endConnector></lcaf><rel id="4b"><children><diamond id="4c" x="1450" y="487" w="133" h="49"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="4d" x="1476.0057220458984" y="503.32794284820557"><a><text><string>IS_OWNED_BY</string></text></a></t></children></rel><llabelDoubleMuitos id="4e"><points><p colinear="true" x="1469.175661091303" y="487" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="1123.4182462073545" y="308" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="4f"><Owner><rel ref="4b"/></Owner></rConnector></startConnector><endConnector><rConnector id="50"><Owner><ent ref="6"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelDoubleUm id="51"><points><p colinear="true" x="1502.9575688073394" y="536" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="1407.3314220183486" y="709" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="52"><Owner><rel ref="4b"/></Owner></rConnector></startConnector><endConnector><rConnector id="53"><Owner><ent ref="3f"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleUm><llabelDoubleMuitos id="54"><points><p colinear="true" x="1070.9839508364898" y="495" c1x="122.9161887743794" c1y="453" c2x="122.9161887743794" c2y="453"/><p colinear="true" x="908.5599944760102" y="653" c1x="122.9161887743794" c1y="453" c2x="122.9161887743794" c2y="453"/></points><startConnector><rConnector id="55"><Owner><rel ref="39"/></Owner></rConnector></startConnector><endConnector><rConnector id="56"><Owner><ent ref="33"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><ent id="57"><children><r id="58" x="2002" y="554" w="101.861328125" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="59" x="2013.5943908691406" y="565.8279428482056"><a><text><string>PERMISSIONS</string></text></a></t></children></ent><rel id="5a"><children><diamond id="5b" x="1874" y="554" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="5c" x="1902.4259185791016" y="565.8279428482056"><a><text><string>HAS</string></text></a></t></children></rel><llabelMuitos id="5d"><points><p colinear="true" x="1954" y="574" c1x="814" c1y="317" c2x="814" c2y="317"/><p colinear="true" x="2002" y="574" c1x="814" c1y="317" c2x="814" c2y="317"/></points><startConnector><rConnector id="5e"><Owner><rel ref="5a"/></Owner></rConnector></startConnector><endConnector><rConnector id="5f"><Owner><ent ref="57"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><rel id="60"><children><diamond id="61" x="1336" y="870" w="100.61328125" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="62" x="1374.7325592041016" y="881.8279428482056"><a><text><string>HAS</string></text></a></t></children></rel><llabelMuitos id="63"><points><p colinear="true" x="1340.3797613047236" y="870" c1x="709" c1y="382.58247787706296" c2x="709" c2y="382.58247787706296"/><p colinear="true" x="928" y="690.4189932309815" c1x="709" c1y="382.58247787706296" c2x="709" c2y="382.58247787706296"/></points><startConnector><rConnector id="64"><Owner><rel ref="60"/></Owner></rConnector></startConnector><endConnector><rConnector id="65"><Owner><ent ref="33"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><rel id="66"><children><diamond id="67" x="1526" y="610" w="133" h="48"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="68" x="1567.839828491211" y="625.8279428482056"><a><text><string>CREATES</string></text></a></t></children></rel><llabelUm id="69"><points><p colinear="true" x="1543.1178010471203" y="658" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="1438.1806282722514" y="709" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="6a"><Owner><rel ref="66"/></Owner></rConnector></startConnector><endConnector><rConnector id="6b"><Owner><ent ref="3f"/></Owner></rConnector></endConnector></llabelUm><entfraca id="6c"><children><r id="6d" x="1703" y="545" w="109.958984375" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="6e" x="1715.4811935424805" y="556.8279428482056"><a><text><string>CUSTOM_ROLE</string></text></a></t></children></entfraca><llabelMuitos id="6f"><points><p colinear="true" x="1409.1788161057693" y="870" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="1735.1073167067307" y="585" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="70"><Owner><rel ref="60"/></Owner></rConnector></startConnector><endConnector><rConnector id="71"><Owner><entfraca ref="6c"/></Owner></rConnector></endConnector><a><text><string>M</string></text></a></llabelMuitos><llabelDoubleMuitos id="72"><points><p colinear="true" x="1874" y="571.6926110224392" c1x="814" c1y="317" c2x="814" c2y="317"/><p colinear="true" x="1812.958984375" y="568.1714768566331" c1x="814" c1y="317" c2x="814" c2y="317"/></points><startConnector><rConnector id="73"><Owner><rel ref="5a"/></Owner></rConnector></startConnector><endConnector><rConnector id="74"><Owner><entfraca ref="6c"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>M</string></text></a></llabelDoubleMuitos><llabelDoubleMuitos id="75"><points><p colinear="true" x="1650.0580842391305" y="610" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="1710.0144219882247" y="585" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="76"><Owner><rel ref="66"/></Owner></rConnector></startConnector><endConnector><rConnector id="77"><Owner><entfraca ref="6c"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><relfraco id="78"><children><diamond id="79" x="1367" y="355" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="7a" x="1385.4037780761719" y="371.82794284820557"><a><text><string>CONTAINS</string></text></a></t></children></relfraco><llabelUm id="7b"><points><p colinear="true" x="1367" y="366.50797428621206" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="1148.572265625" y="305.7444153420483" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="7c"><Owner><relfraco ref="78"/></Owner></rConnector></startConnector><endConnector><rConnector id="7d"><Owner><ent ref="6"/></Owner></rConnector></endConnector></llabelUm><llabelDoubleMuitos id="7e"><points><p colinear="true" x="1461.7810124577702" y="405" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="1720.9546822212837" y="545" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="7f"><Owner><relfraco ref="78"/></Owner></rConnector></startConnector><endConnector><rConnector id="80"><Owner><entfraca ref="6c"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><relfraco id="81"><children><diamond id="82" x="1190" y="447" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="83" x="1208.4037780761719" y="463.82794284820557"><a><text><string>CONTAINS</string></text></a></t></children></relfraco><llabelUm id="84"><points><p colinear="true" x="1217.6149636973505" y="447" c1x="527" c1y="244" c2x="527" c2y="244"/><p colinear="true" x="1101.4941618546195" y="308" c1x="527" c1y="244" c2x="527" c2y="244"/></points><startConnector><rConnector id="85"><Owner><relfraco ref="81"/></Owner></rConnector></startConnector><endConnector><rConnector id="86"><Owner><ent ref="6"/></Owner></rConnector></endConnector></llabelUm><entfraca id="87"><children><r id="88" x="1248" y="578" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="89" x="1260.3277969360352" y="589.8279428482056"><a><text><string>CHANNEL</string></text></a></t></children></entfraca><llabelDoubleMuitos id="8a"><points><p colinear="true" x="1248.3214285714287" y="497" c1x="527" c1y="244" c2x="527" c2y="244"/><p colinear="true" x="1280.142857142857" y="578" c1x="527" c1y="244" c2x="527" c2y="244"/></points><startConnector><rConnector id="8b"><Owner><relfraco ref="81"/></Owner></rConnector></startConnector><endConnector><rConnector id="8c"><Owner><entfraca ref="87"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><rel id="8d"><children><diamond id="8e" x="1039" y="589" w="115.37890625" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="8f" x="1052.9911575317383" y="600.8279428482056"><a><text><string>IS_CREATED_BY</string></text></a></t></children></rel><llabelDoubleMuitos id="90"><points><p colinear="true" x="1154.37890625" y="605.6829639309451" c1x="527" c1y="244" c2x="527" c2y="244"/><p colinear="true" x="1248" y="600.2999254729406" c1x="527" c1y="244" c2x="527" c2y="244"/></points><startConnector><rConnector id="91"><Owner><rel ref="8d"/></Owner></rConnector></startConnector><endConnector><rConnector id="92"><Owner><entfraca ref="87"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="93"><points><p colinear="true" x="1039" y="626.6919578096192" c1x="527" c1y="244" c2x="527" c2y="244"/><p colinear="true" x="928" y="660.7329689561905" c1x="527" c1y="244" c2x="527" c2y="244"/></points><startConnector><rConnector id="94"><Owner><rel ref="8d"/></Owner></rConnector></startConnector><endConnector><rConnector id="95"><Owner><ent ref="33"/></Owner></rConnector></endConnector></llabelUm><rel id="96"><children><diamond id="97" x="496" y="279" w="123" h="41"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="98" x="513.8017044067383" y="291.32794284820557"><a><text><string>IS_CREATED_BY</string></text></a></t></children></rel><llabelDoubleMuitos id="99"><points><p colinear="true" x="496" y="288.0257870338338" c1x="527" c1y="244" c2x="527" c2y="244"/><p colinear="true" x="409.572265625" y="271.90074263705344" c1x="527" c1y="244" c2x="527" c2y="244"/></points><startConnector><rConnector id="9a"><Owner><rel ref="96"/></Owner></rConnector></startConnector><endConnector><rConnector id="9b"><Owner><ent ref="9"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="9c"><points><p colinear="true" x="584.0421052631579" y="320" c1x="527" c1y="244" c2x="527" c2y="244"/><p colinear="true" x="716.1052631578948" y="422" c1x="527" c1y="244" c2x="527" c2y="244"/></points><startConnector><rConnector id="9d"><Owner><rel ref="96"/></Owner></rConnector></startConnector><endConnector><rConnector id="9e"><Owner><ent ref="27"/></Owner></rConnector></endConnector></llabelUm><ent id="9f"><children><r id="a0" x="470" y="520" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="a1" x="472.8357391357422" y="531.8279428482056"><a><text><string>MODERATOR</string></text></a></t></children></ent><sobreposicao id="a2"><children><circ id="a3" x="624" y="484" w="20" h="20"><a><fillColor><color rgba="#fff5f2e0"/></fillColor></a></circ><tn id="a4" x="628" y="485"><a><fontBold><boolean>true</boolean></fontBold><fontSize><double>16</double></fontSize><text><string>o</string></text></a></tn></children></sobreposicao><generalizacaoLine id="a5"><points><p colinear="true" x="624" y="498.99311685562134" c1x="-200" c1y="368" c2x="-200" c2y="368"/><p colinear="true" x="550" y="525.6116199493408" c1x="-200" c1y="368" c2x="-200" c2y="368"/></points><startConnector><rConnector id="a6"><Owner><sobreposicao ref="a2"/></Owner></rConnector></startConnector><endConnector><rConnector id="a7"><Owner><ent ref="9f"/></Owner></rConnector></endConnector></generalizacaoLine><lcaf id="a8"><points><p colinear="true" x="702" y="461.77630438628023" c1x="-200" c1y="368" c2x="-200" c2y="368"/><p colinear="true" x="644" y="490.4519457463865" c1x="-200" c1y="368" c2x="-200" c2y="368"/></points><startConnector><rConnector id="a9"><Owner><ent ref="27"/></Owner></rConnector></startConnector><endConnector><rConnector id="aa"><Owner><sobreposicao ref="a2"/></Owner></rConnector></endConnector></lcaf><rel id="ab"><children><diamond id="ac" x="346" y="396" w="142.0390625" h="57"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="ad" x="362.60516357421875" y="416.32794284820557"><a><text><string>IS_MODERATED_BY</string></text></a></t></children></rel><llabelDoubleMuitos id="ae"><points><p colinear="true" x="404.67818258453644" y="396" c1x="527" c1y="244" c2x="527" c2y="244"/><p colinear="true" x="354.4467283672112" y="280" c1x="527" c1y="244" c2x="527" c2y="244"/></points><startConnector><rConnector id="af"><Owner><rel ref="ab"/></Owner></rConnector></startConnector><endConnector><rConnector id="b0"><Owner><ent ref="9"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="b1"><points><p colinear="true" x="439.9627637987013" y="453" c1x="527" c1y="244" c2x="527" c2y="244"/><p colinear="true" x="493.8994859307359" y="520" c1x="527" c1y="244" c2x="527" c2y="244"/></points><startConnector><rConnector id="b2"><Owner><rel ref="ab"/></Owner></rConnector></startConnector><endConnector><rConnector id="b3"><Owner><ent ref="9f"/></Owner></rConnector></endConnector></llabelUm><rel id="b4"><children><diamond id="b5" x="219" y="656" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="b6" x="236.4938507080078" y="667.8279428482056"><a><text><string>REPLIES</string></text></a></t></children></rel><llabelGeneralizacao id="b7" labelGeneralizacaoText="reply(N)"><points><p colinear="true" x="259.70489053672316" y="656" c1x="257.58963815789474" c1y="-190" c2x="257.58963815789474" c2y="-190"/><p colinear="true" x="264.53339071327684" y="519" c1x="257.58963815789474" c1y="-190" c2x="257.58963815789474" c2y="-190"/></points><startConnector><rConnector id="b8"><Owner><rel ref="b4"/></Owner></rConnector></startConnector><endConnector><rConnector id="b9"><Owner><entfraca ref="c"/></Owner></rConnector></endConnector></llabelGeneralizacao><atrchaveparcial id="ba" nullable="false" attributeType="NUMBER"><children><e id="bb" x="1719" y="477" w="125" h="32.33216437450733"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="bc" x="1748.7862854003906" y="484.99402503545923"><a><strokeDashes><doubleArray><double>3</double></doubleArray></strokeDashes><fontBold><boolean>true</boolean></fontBold><text><string>Role_name</string></text></a></t></children></atrchaveparcial><atrchave id="bd" nullable="false" attributeType="NUMBER"><children><e id="be" x="1990" y="501" w="125.65771484375" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="bf" x="2000" y="502.82794284820557"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>Permission_name</string></text></a></t></children></atrchave><lcaf id="c0"><points><p colinear="true" x="2052.845017206101" y="521" c1x="467" c1y="-8" c2x="467" c2y="-8"/><p colinear="true" x="2052.8983444940477" y="554" c1x="467" c1y="-8" c2x="467" c2y="-8"/></points><startConnector><rConnector id="c1"><Owner><atrchave ref="bd"/></Owner></rConnector></startConnector><endConnector><rConnector id="c2"><Owner><ent ref="57"/></Owner></rConnector></endConnector></lcaf><atr id="c3" nullable="false" attributeType="VARCHAR2(128)"><children><e id="c4" x="2010" y="632" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="c5" x="2017.713768005371" y="633.8279428482056"><a><text><string>Description</string></text></a></t></children></atr><lcaf id="c6"><points><p colinear="true" x="2052.0687040441176" y="594" c1x="467" c1y="-8" c2x="467" c2y="-8"/><p colinear="true" x="2050.430980009191" y="632" c1x="467" c1y="-8" c2x="467" c2y="-8"/></points><startConnector><rConnector id="c7"><Owner><ent ref="57"/></Owner></rConnector></startConnector><endConnector><rConnector id="c8"><Owner><atr ref="c3"/></Owner></rConnector></endConnector></lcaf><lcaf id="c9"><points><p colinear="true" x="1776.20675588969" y="509.33216437450733" c1x="467" c1y="-8" c2x="467" c2y="-8"/><p colinear="true" x="1764.5280721699569" y="545" c1x="467" c1y="-8" c2x="467" c2y="-8"/></points><startConnector><rConnector id="ca"><Owner><atrchaveparcial ref="ba"/></Owner></rConnector></startConnector><endConnector><rConnector id="cb"><Owner><entfraca ref="6c"/></Owner></rConnector></endConnector></lcaf><atrchave id="cc" nullable="false" attributeType="NUMBER"><children><e id="cd" x="700" y="379" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="ce" x="709.9878005981445" y="380.82794284820557"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>username</string></text></a></t></children></atrchave><lcaf id="cf"><points><p colinear="true" x="740.377358490566" y="399" c1x="350.6101694915254" c1y="32" c2x="350.6101694915254" c2y="32"/><p colinear="true" x="741.2452830188679" y="422" c1x="350.6101694915254" c1y="32" c2x="350.6101694915254" c2y="32"/></points><startConnector><rConnector id="d0"><Owner><atrchave ref="cc"/></Owner></rConnector></startConnector><endConnector><rConnector id="d1"><Owner><ent ref="27"/></Owner></rConnector></endConnector></lcaf><atr id="d2" nullable="false" attributeType="VARCHAR2(128)"><children><e id="d3" x="639" y="349" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="d4" x="651.6818008422852" y="350.82794284820557"><a><text><string>password</string></text></a></t></children></atr><lcaf id="d5"><points><p colinear="true" x="686.5903614457832" y="369" c1x="350.6101694915254" c1y="32" c2x="350.6101694915254" c2y="32"/><p colinear="true" x="726.8192771084338" y="422" c1x="350.6101694915254" c1y="32" c2x="350.6101694915254" c2y="32"/></points><startConnector><rConnector id="d6"><Owner><atr ref="d2"/></Owner></rConnector></startConnector><endConnector><rConnector id="d7"><Owner><ent ref="27"/></Owner></rConnector></endConnector></lcaf><atrchave id="d8" nullable="false" attributeType="NUMBER"><children><e id="d9" x="718" y="54" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="da" x="742.7268981933594" y="55.827942848205566"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>Tittle</string></text></a></t></children></atrchave><lcaf id="db"><points><p colinear="true" x="733.0943396226415" y="97" c1x="368" c1y="39" c2x="368" c2y="39"/><p colinear="true" x="750.4528301886793" y="74" c1x="368" c1y="39" c2x="368" c2y="39"/></points><startConnector><rConnector id="dc"><Owner><ent ref="0"/></Owner></rConnector></startConnector><endConnector><rConnector id="dd"><Owner><atrchave ref="d8"/></Owner></rConnector></endConnector></lcaf><atr id="de" nullable="false" attributeType="VARCHAR2(128)"><children><e id="df" x="625" y="58" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="e0" x="632.7137680053711" y="59.827942848205566"><a><text><string>Description</string></text></a></t></children></atr><lcaf id="e1"><points><p colinear="true" x="675.8163265306123" y="78" c1x="368" c1y="39" c2x="368" c2y="39"/><p colinear="true" x="696.3673469387755" y="97" c1x="368" c1y="39" c2x="368" c2y="39"/></points><startConnector><rConnector id="e2"><Owner><atr ref="de"/></Owner></rConnector></startConnector><endConnector><rConnector id="e3"><Owner><ent ref="0"/></Owner></rConnector></endConnector></lcaf><rel id="e4"><children><diamond id="e5" x="947" y="411" w="117.84867858886719" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="e6" x="957" y="422.82794284820557"><a><text><string>HAS_WORKED_IN</string></text></a></t></children></rel><llabelMuitos id="e7"><points><p colinear="true" x="1016.9539607654918" y="411" c1x="368" c1y="39" c2x="368" c2y="39"/><p colinear="true" x="1073.7565113414416" y="308" c1x="368" c1y="39" c2x="368" c2y="39"/></points><startConnector><rConnector id="e8"><Owner><rel ref="e4"/></Owner></rConnector></startConnector><endConnector><rConnector id="e9"><Owner><ent ref="6"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><llabelMuitos id="ea"><points><p colinear="true" x="996.1785261296044" y="451" c1x="368" c1y="39" c2x="368" c2y="39"/><p colinear="true" x="897.7458131648292" y="653" c1x="368" c1y="39" c2x="368" c2y="39"/></points><startConnector><rConnector id="eb"><Owner><rel ref="e4"/></Owner></rConnector></startConnector><endConnector><rConnector id="ec"><Owner><ent ref="33"/></Owner></rConnector></endConnector><a><text><string>M</string></text></a></llabelMuitos><atr id="ed" nullable="false" attributeType="VARCHAR2(128)"><children><e id="ee" x="809" y="395" w="86" h="30"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="ef" x="814.7277297973633" y="401.82794284820557"><a><text><string>register_date</string></text></a></t></children></atr><lcaf id="f0"><points><p colinear="true" x="809" y="422.5090909090909" c1x="350.6101694915254" c1y="32" c2x="350.6101694915254" c2y="32"/><p colinear="true" x="782" y="430.3636363636364" c1x="350.6101694915254" c1y="32" c2x="350.6101694915254" c2y="32"/></points><startConnector><rConnector id="f1"><Owner><atr ref="ed"/></Owner></rConnector></startConnector><endConnector><rConnector id="f2"><Owner><ent ref="27"/></Owner></rConnector></endConnector></lcaf><atr id="f3" nullable="false" attributeType="VARCHAR2(128)"><children><e id="f4" x="483" y="431" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="f5" x="494.67980194091797" y="432.82794284820557"><a><text><string>started_at</string></text></a></t></children></atr><lcaf id="f6"><points><p colinear="true" x="488.0390625" y="435.5569643581143" c1x="368" c1y="39" c2x="368" c2y="39"/><p colinear="true" x="483" y="434.7724374331945" c1x="368" c1y="39" c2x="368" c2y="39"/></points><startConnector><rConnector id="f7"><Owner><rel ref="ab"/></Owner></rConnector></startConnector><endConnector><rConnector id="f8"><Owner><atr ref="f3"/></Owner></rConnector></endConnector></lcaf><rel id="f9"><children><diamond id="fa" x="528" y="628" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="fb" x="540.6758117675781" y="639.8279428482056"><a><text><string>STARTS_A</string></text></a></t></children></rel><llabelUm id="fc"><points><p colinear="true" x="584.8932038834952" y="628" c1x="368" c1y="39" c2x="368" c2y="39"/><p colinear="true" x="725.1067961165048" y="462" c1x="368" c1y="39" c2x="368" c2y="39"/></points><startConnector><rConnector id="fd"><Owner><rel ref="f9"/></Owner></rConnector></startConnector><endConnector><rConnector id="fe"><Owner><ent ref="27"/></Owner></rConnector></endConnector></llabelUm><llabelMuitos id="ff"><points><p colinear="true" x="528" y="628.3145522339918" c1x="368" c1y="39" c2x="368" c2y="39"/><p colinear="true" x="305.8774381291946" y="519" c1x="368" c1y="39" c2x="368" c2y="39"/></points><startConnector><rConnector id="100"><Owner><rel ref="f9"/></Owner></rConnector></startConnector><endConnector><rConnector id="101"><Owner><entfraca ref="c"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><atr id="102" nullable="false" attributeType="VARCHAR2(128)"><children><e id="103" x="1059" y="204" w="111" h="32"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="104" x="1076.0517272949219" y="211.82794284820557"><a><text><string>Project_name</string></text></a></t></children></atr><atrchave id="105" nullable="false" attributeType="NUMBER"><children><e id="106" x="1160" y="229" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="107" x="1170.4468002319336" y="230.82794284820557"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>project_id</string></text></a></t></children></atrchave><lcaf id="108"><points><p colinear="true" x="1107.5085018382354" y="236" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1093.5255055147059" y="268" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="109"><Owner><atr ref="102"/></Owner></rConnector></startConnector><endConnector><rConnector id="10a"><Owner><ent ref="6"/></Owner></rConnector></endConnector></lcaf><lcaf id="10b"><points><p colinear="true" x="1176.486965880102" y="249" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1131.812201052296" y="268" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="10c"><Owner><atrchave ref="105"/></Owner></rConnector></startConnector><endConnector><rConnector id="10d"><Owner><ent ref="6"/></Owner></rConnector></endConnector></lcaf><atrchaveparcial id="10e" nullable="false" attributeType="NUMBER"><children><e id="10f" x="1330" y="538" w="125" h="27"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="110" x="1349.2157287597656" y="543.3279428482056"><a><strokeDashes><doubleArray><double>3</double></doubleArray></strokeDashes><fontBold><boolean>true</boolean></fontBold><text><string>channel_name</string></text></a></t></children></atrchaveparcial><lcaf id="111"><points><p colinear="true" x="1328" y="580.200956937799" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1362.1612903225807" y="565" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="112"><Owner><entfraca ref="87"/></Owner></rConnector></startConnector><endConnector><rConnector id="113"><Owner><atrchaveparcial ref="10e"/></Owner></rConnector></endConnector></lcaf><rel id="114"><children><diamond id="115" x="1068" y="659" w="141.78884887695312" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="116" x="1078" y="670.8279428482056"><a><text><string>SEND_A_MESSAGE_IN</string></text></a></t></children></rel><llabelMuitos id="117"><points><p colinear="true" x="1175.710615935149" y="659" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1251.1838085033276" y="618" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="118"><Owner><rel ref="114"/></Owner></rConnector></startConnector><endConnector><rConnector id="119"><Owner><entfraca ref="87"/></Owner></rConnector></endConnector><a><text><string>M</string></text></a></llabelMuitos><atr id="11a" nullable="false" attributeType="VARCHAR2(128)"><children><e id="11b" x="1160" y="711" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="11c" x="1177.823844909668" y="712.8279428482056"><a><text><string>Msg_txt</string></text></a></t></children></atr><lcaf id="11d"><points><p colinear="true" x="1167.9923175630115" y="699" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1185.4510534377325" y="711" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="11e"><Owner><rel ref="114"/></Owner></rConnector></startConnector><endConnector><rConnector id="11f"><Owner><atr ref="11a"/></Owner></rConnector></endConnector></lcaf><atr id="120" nullable="false" attributeType="VARCHAR2(128)"><children><e id="121" x="808" y="452" w="168.57302856445312" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="122" x="833.2701034545898" y="453.82794284820557"><a><text><string>strted_involvmnet_at</string></text></a></t></children></atr><lcaf id="123"><points><p colinear="true" x="928.9438771893902" y="452" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="947" y="447.07435304161464" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="124"><Owner><atr ref="120"/></Owner></rConnector></startConnector><endConnector><rConnector id="125"><Owner><rel ref="e4"/></Owner></rConnector></endConnector></lcaf><atr id="126" nullable="false" attributeType="VARCHAR2(128)"><children><e id="127" x="877" y="360" w="168.57302856445312" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="128" x="912.4161758422852" y="361.82794284820557"><a><text><string>ended_involment</string></text></a></t></children></atr><lcaf id="129"><points><p colinear="true" x="968.604190513736" y="380" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="991.2889868314148" y="411" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="12a"><Owner><atr ref="126"/></Owner></rConnector></startConnector><endConnector><rConnector id="12b"><Owner><rel ref="e4"/></Owner></rConnector></endConnector></lcaf><llabelMuitos id="12c"><points><p colinear="true" x="1068" y="677.3045994442368" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="928" y="673.9565776542748" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="12d"><Owner><rel ref="114"/></Owner></rConnector></startConnector><endConnector><rConnector id="12e"><Owner><ent ref="33"/></Owner></rConnector></endConnector><a><text><string>P</string></text></a></llabelMuitos><atr id="12f" nullable="false" attributeType="VARCHAR2(128)"><children><e id="130" x="1055" y="531" w="168.57302856445312" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="131" x="1079.8501052856445" y="532.8279428482056"><a><text><string>Strted_involvmnet_at</string></text></a></t></children></atr><lcaf id="132"><points><p colinear="true" x="1106.0113904548414" y="495" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1132.0527917110558" y="531" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="133"><Owner><rel ref="39"/></Owner></rConnector></startConnector><endConnector><rConnector id="134"><Owner><atr ref="12f"/></Owner></rConnector></endConnector></lcaf><atrchave id="135" nullable="false" attributeType="NUMBER"><children><e id="136" x="2137" y="519" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="137" x="2154.4653396606445" y="520.8279428482056"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>Version</string></text></a></t></children></atrchave><lcaf id="138"><points><p colinear="true" x="2103.861328125" y="555.5274268577771" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2149.4290364583335" y="539" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="139"><Owner><ent ref="57"/></Owner></rConnector></startConnector><endConnector><rConnector id="13a"><Owner><atrchave ref="135"/></Owner></rConnector></endConnector></lcaf><t id="13b" x="1814" y="379"><a><text><null/></text></a></t><ta id="13c" x="2140" y="374" w="193" h="107"><a><text><string>Version ako menvmime neshto za nekoja permisija tie sho nemat videno da ne se ostheteniText</string></text></a></ta><atr id="13d" nullable="false" attributeType="VARCHAR2(128)"><children><e id="13e" x="1222" y="680" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="13f" x="1240.6278457641602" y="681.8279428482056"><a><text><string>At_time</string></text></a></t></children></atr><lcaf id="140"><points><p colinear="true" x="1209.7888488769531" y="685.3347144535587" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1222" y="686.4258320714312" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="141"><Owner><rel ref="114"/></Owner></rConnector></startConnector><endConnector><rConnector id="142"><Owner><atr ref="13d"/></Owner></rConnector></endConnector></lcaf><ent id="143"><children><r id="144" x="354" y="767" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="145" x="382.4619140625" y="778.8279428482056"><a><text><string>TAG</string></text></a></t></children></ent><rel id="146"><children><diamond id="147" x="449" y="673" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="148" x="464.33982849121094" y="684.8279428482056"><a><text><string>CREATES</string></text></a></t></children></rel><llabelUm id="149"><points><p colinear="true" x="491.7450980392157" y="673" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="507.2549019607843" y="560" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="14a"><Owner><rel ref="146"/></Owner></rConnector></startConnector><endConnector><rConnector id="14b"><Owner><ent ref="9f"/></Owner></rConnector></endConnector></llabelUm><atr id="14c" nullable="false" attributeType="VARCHAR2(128)"><children><e id="14d" x="315" y="835" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="14e" x="341.4819030761719" y="836.8279428482056"><a><text><string>Desc</string></text></a></t></children></atr><rel id="14f"><children><diamond id="150" x="58" y="464" w="115.53266906738281" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="151" x="72.68603515625" y="475.82794284820557"><a><text><string>ASSISGNED_TO</string></text></a></t></children></rel><llabelMuitos id="152"><points><p colinear="true" x="123.30024347331862" y="464" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="251" y="125"/><p colinear="true" x="678" y="117.68522483940043" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="153"><Owner><rel ref="14f"/></Owner></rConnector></startConnector><endConnector><rConnector id="154"><Owner><ent ref="0"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><llabelMuitos id="155"><points><p colinear="true" x="121.93652092993676" y="504" c1x="-691.0820285257989" c1y="399" c2x="-691.0820285257989" c2y="399"/><p mask="3" colinear="true" x="204" y="770"/><p colinear="true" x="354" y="783.421052631579" c1x="-691.0820285257989" c1y="399" c2x="-691.0820285257989" c2y="399"/></points><startConnector><rConnector id="156"><Owner><rel ref="14f"/></Owner></rConnector></startConnector><endConnector><rConnector id="157"><Owner><ent ref="143"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><lcaf id="158"><points><p colinear="true" x="380.55172413793105" y="807" c1x="-252" c1y="-115" c2x="-252" c2y="-115"/><p colinear="true" x="361.7241379310345" y="835" c1x="-252" c1y="-115" c2x="-252" c2y="-115"/></points><startConnector><rConnector id="159"><Owner><ent ref="143"/></Owner></rConnector></startConnector><endConnector><rConnector id="15a"><Owner><atr ref="14c"/></Owner></rConnector></endConnector></lcaf><atrchave id="15b" nullable="false" attributeType="NUMBER"><children><e id="15c" x="404" y="834" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="15d" x="426.3298797607422" y="835.8279428482056"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>Name</string></text></a></t></children></atrchave><lcaf id="15e"><points><p colinear="true" x="411.5438596491228" y="807" c1x="-252" c1y="-115" c2x="-252" c2y="-115"/><p colinear="true" x="435.2280701754386" y="834" c1x="-252" c1y="-115" c2x="-252" c2y="-115"/></points><startConnector><rConnector id="15f"><Owner><ent ref="143"/></Owner></rConnector></startConnector><endConnector><rConnector id="160"><Owner><atrchave ref="15b"/></Owner></rConnector></endConnector></lcaf><atr id="161" nullable="false" attributeType="VARCHAR2(128)"><children><e id="162" x="1361" y="588" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="163" x="1369.4037704467773" y="589.8279428482056"><a><text><string>description</string></text></a></t></children></atr><lcaf id="164"><points><p colinear="true" x="1328" y="598" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1361" y="598" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="165"><Owner><entfraca ref="87"/></Owner></rConnector></startConnector><endConnector><rConnector id="166"><Owner><atr ref="161"/></Owner></rConnector></endConnector></lcaf><llabelGeneralizacao id="167" labelGeneralizacaoText="discussion(1)"><points><p colinear="true" x="299" y="667.8181818181819" c1x="132.8250289220532" c1y="12.754354123010671" c2x="132.8250289220532" c2y="12.754354123010671"/><p colinear="true" x="347" y="658"/><p colinear="true" x="330.08984375" y="533"/><p colinear="true" x="303.38625919117646" y="519" c1x="132.8250289220532" c1y="12.754354123010671" c2x="132.8250289220532" c2y="12.754354123010671"/></points><startConnector><rConnector id="168"><Owner><rel ref="b4"/></Owner></rConnector></startConnector><endConnector><rConnector id="169"><Owner><entfraca ref="c"/></Owner></rConnector></endConnector></llabelGeneralizacao><rel id="16a"><children><diamond id="16b" x="24" y="337" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="16c" x="47.39189147949219" y="348.82794284820557"><a><text><string>LIKED</string></text></a></t></children></rel><llabelMuitos id="16d"><points><p colinear="true" x="77.59683794466403" y="337" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="236" y="104"/><p colinear="true" x="678" y="115.92116182572614" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="16e"><Owner><rel ref="16a"/></Owner></rConnector></startConnector><endConnector><rConnector id="16f"><Owner><ent ref="0"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><llabelMuitos id="170"><points><p colinear="true" x="61.00787401574802" y="377" c1x="-5" c1y="-4" c2x="-5" c2y="-4"/><p colinear="true" x="45" y="484"/><p colinear="true" x="174" y="713"/><p colinear="true" x="212" y="870"/><p colinear="true" x="567" y="872"/><p colinear="true" x="733.8604651162791" y="462" c1x="-5" c1y="-4" c2x="-5" c2y="-4"/></points><startConnector><rConnector id="171"><Owner><rel ref="16a"/></Owner></rConnector></startConnector><endConnector><rConnector id="172"><Owner><ent ref="27"/></Owner></rConnector></endConnector><a><text><string>M</string></text></a></llabelMuitos><atr id="173" nullable="false" attributeType="VARCHAR2(128)"><children><e id="174" x="801" y="61" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="175" x="826.9058990478516" y="62.827942848205566"><a><text><string>Logo</string></text></a></t></children></atr><lcaf id="176"><points><p colinear="true" x="758" y="102.04065040650406" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="814.2608695652174" y="81" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="177"><Owner><ent ref="0"/></Owner></rConnector></startConnector><endConnector><rConnector id="178"><Owner><atr ref="173"/></Owner></rConnector></endConnector></lcaf><atr id="179" nullable="false" attributeType="VARCHAR2(128)"><children><e id="17a" x="1340" y="615" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="17b" x="1345.9557647705078" y="616.8279428482056"><a><text><string>background</string></text></a></t></children></atr><atr id="17c" nullable="false" attributeType="VARCHAR2(128)"><children><e id="17d" x="1256" y="644" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="17e" x="1283.5019073486328" y="645.8279428482056"><a><text><string>logo</string></text></a></t></children></atr><lcaf id="17f"><points><p colinear="true" x="1328" y="609.7391304347826" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1345.9259259259259" y="615" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="180"><Owner><entfraca ref="87"/></Owner></rConnector></startConnector><endConnector><rConnector id="181"><Owner><atr ref="179"/></Owner></rConnector></endConnector></lcaf><lcaf id="182"><points><p colinear="true" x="1290.857142857143" y="618" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1294.5714285714287" y="644" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="183"><Owner><entfraca ref="87"/></Owner></rConnector></startConnector><endConnector><rConnector id="184"><Owner><atr ref="17c"/></Owner></rConnector></endConnector></lcaf><atr id="185" nullable="false" attributeType="VARCHAR2(128)"><children><e id="186" x="636" y="319" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="187" x="652.5218353271484" y="320.82794284820557"><a><text><string>is_active</string></text></a></t></children></atr><lcaf id="188"><points><p colinear="true" x="681.8407079646017" y="339" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="730.3185840707964" y="422" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="189"><Owner><atr ref="185"/></Owner></rConnector></startConnector><endConnector><rConnector id="18a"><Owner><ent ref="27"/></Owner></rConnector></endConnector></lcaf><atr id="18b" nullable="false" attributeType="VARCHAR2(128)"><children><e id="18c" x="787" y="822" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="18d" x="814.1719055175781" y="823.8279428482056"><a><text><string>desc</string></text></a></t></children></atr><atr id="18e" nullable="false" attributeType="VARCHAR2(128)"><children><e id="18f" x="842" y="770" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="190" x="864.8458786010742" y="771.8279428482056"><a><text><string>status</string></text></a></t></children></atr><llabelDoubleMuitos id="191"><points><p colinear="true" x="468.7872340425532" y="713" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="414.2127659574468" y="767" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="192"><Owner><rel ref="146"/></Owner></rConnector></startConnector><endConnector><rConnector id="193"><Owner><ent ref="143"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><atr id="194" nullable="false" attributeType="VARCHAR2(128)"><children><e id="195" x="601" y="793" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="196" x="611.4557952880859" y="794.8279428482056"><a><text><string>created_at</string></text></a></t></children></atr><atr id="197" nullable="false" attributeType="VARCHAR2(128)"><children><e id="198" x="944" y="216" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="199" x="971.5019073486328" y="217.82794284820557"><a><text><string>logo</string></text></a></t></children></atr><lcaf id="19a"><points><p colinear="true" x="1000.2558278729839" y="236" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1052.2744770665322" y="268" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="19b"><Owner><atr ref="197"/></Owner></rConnector></startConnector><endConnector><rConnector id="19c"><Owner><ent ref="6"/></Owner></rConnector></endConnector></lcaf><atr id="19d" nullable="false" attributeType="VARCHAR2(128)"><children><e id="19e" x="730" y="328" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="19f" x="760.5679321289062" y="329.82794284820557"><a><text><string>sex</string></text></a></t></children></atr><atr id="1a0" nullable="false" attributeType="VARCHAR2(128)"><children><e id="1a1" x="809" y="339" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="1a2" x="818.6517791748047" y="340.82794284820557"><a><text><string>short_desc</string></text></a></t></children></atr><lcaf id="1a3"><points><p colinear="true" x="767.3076923076923" y="348" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="747.3846153846154" y="422" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1a4"><Owner><atr ref="19d"/></Owner></rConnector></startConnector><endConnector><rConnector id="1a5"><Owner><ent ref="27"/></Owner></rConnector></endConnector></lcaf><lcaf id="1a6"><points><p colinear="true" x="837.494623655914" y="359" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="765.010752688172" y="422" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1a7"><Owner><atr ref="1a0"/></Owner></rConnector></startConnector><endConnector><rConnector id="1a8"><Owner><ent ref="27"/></Owner></rConnector></endConnector></lcaf><rel id="1a9"><children><diamond id="1aa" x="471" y="346" w="123.80061340332031" h="58"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="1ab" x="496.81827545166016" y="368.015625"><a><text><string>BLACKLISTS</string></text></a></t></children></rel><llabelUm id="1ac"><points><p colinear="true" x="550.4020907576415" y="404" c1x="-16.043478260869506" c1y="0" c2x="-16.043478260869506" c2y="0"/><p colinear="true" x="576.9565217391305" y="448"/><p colinear="true" x="524.5557655954632" y="520" c1x="-16.043478260869506" c1y="0" c2x="-16.043478260869506" c2y="0"/></points><startConnector><rConnector id="1ad"><Owner><rel ref="1a9"/></Owner></rConnector></startConnector><endConnector><rConnector id="1ae"><Owner><ent ref="9f"/></Owner></rConnector></endConnector></llabelUm><llabelMuitos id="1af"><points><p colinear="true" x="594.8006134033203" y="394.83417805923756" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="702" y="429.18314714992806" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1b0"><Owner><rel ref="1a9"/></Owner></rConnector></startConnector><endConnector><rConnector id="1b1"><Owner><ent ref="27"/></Owner></rConnector></endConnector><a><text><string>P</string></text></a></llabelMuitos><atr id="1b2" nullable="false" attributeType="VARCHAR2(128)"><children><e id="1b3" x="340" y="186" w="141.5848388671875" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="1b4" x="350" y="187.82794284820557"><a><text><string>community_guideline</string></text></a></t></children></atr><lcaf id="1b5"><points><p colinear="true" x="400.63518714904785" y="206" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="366.1005973815918" y="240" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1b6"><Owner><atr ref="1b2"/></Owner></rConnector></startConnector><endConnector><rConnector id="1b7"><Owner><ent ref="9"/></Owner></rConnector></endConnector></lcaf><llabelMuitos id="1b8"><points><p colinear="true" x="485.7149932861328" y="346" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="378.3277282714844" y="280" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1b9"><Owner><rel ref="1a9"/></Owner></rConnector></startConnector><endConnector><rConnector id="1ba"><Owner><ent ref="9"/></Owner></rConnector></endConnector><a><text><string>Q</string></text></a></llabelMuitos><atrchaveparcial id="1bb" nullable="false" attributeType="NUMBER"><children><e id="1bc" x="601" y="828" w="125" h="27"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="1bd" x="636.0843124389648" y="833.3279428482056"><a><strokeDashes><doubleArray><double>3</double></doubleArray></strokeDashes><fontBold><boolean>true</boolean></fontBold><text><string>report_id</string></text></a></t></children></atrchaveparcial><entfraca id="1be"><children><r id="1bf" x="730" y="734" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="1c0" x="747.5478439331055" y="745.8279428482056"><a><text><string>REPORT</string></text></a></t></children></entfraca><relfraco id="1c1"><children><diamond id="1c2" x="671" y="629" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="1c3" x="682.1557540893555" y="645.8279428482056"><a><text><string>SUBBMITTED</string></text></a></t></children></relfraco><relfraco id="1c4"><children><diamond id="1c5" x="752" y="578" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="1c6" x="780.3578567504883" y="594.8279428482056"><a><text><string>ABOUT</string></text></a></t></children></relfraco><llabelDoubleMuitos id="1c7"><points><p colinear="true" x="732.125" y="679" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="759.9" y="734" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1c8"><Owner><relfraco ref="1c1"/></Owner></rConnector></startConnector><endConnector><rConnector id="1c9"><Owner><entfraca ref="1be"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>M</string></text></a></llabelDoubleMuitos><llabelDoubleMuitos id="1ca"><points><p colinear="true" x="795.4503311258278" y="628" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="774.0397350993378" y="734" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1cb"><Owner><relfraco ref="1c4"/></Owner></rConnector></startConnector><endConnector><rConnector id="1cc"><Owner><entfraca ref="1be"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="1cd"><points><p colinear="true" x="722.1533018867924" y="629" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="739.877358490566" y="462" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1ce"><Owner><relfraco ref="1c1"/></Owner></rConnector></startConnector><endConnector><rConnector id="1cf"><Owner><ent ref="27"/></Owner></rConnector></endConnector></llabelUm><llabelUm id="1d0"><points><p colinear="true" x="791.416149068323" y="578" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="749.2670807453417" y="462" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1d1"><Owner><relfraco ref="1c4"/></Owner></rConnector></startConnector><endConnector><rConnector id="1d2"><Owner><ent ref="27"/></Owner></rConnector></endConnector></llabelUm><lcaf id="1d3"><points><p colinear="true" x="730" y="769.1937984496124" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="667.3265306122449" y="793" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1d4"><Owner><entfraca ref="1be"/></Owner></rConnector></startConnector><endConnector><rConnector id="1d5"><Owner><atr ref="194"/></Owner></rConnector></endConnector></lcaf><lcaf id="1d6"><points><p colinear="true" x="810" y="763.2857142857143" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="842" y="770.7142857142857" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1d7"><Owner><entfraca ref="1be"/></Owner></rConnector></startConnector><endConnector><rConnector id="1d8"><Owner><atr ref="18e"/></Owner></rConnector></endConnector></lcaf><lcaf id="1d9"><points><p colinear="true" x="784.6153846153846" y="774" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="819.6923076923077" y="822" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1da"><Owner><entfraca ref="1be"/></Owner></rConnector></startConnector><endConnector><rConnector id="1db"><Owner><atr ref="18b"/></Owner></rConnector></endConnector></lcaf><lcaf id="1dc"><points><p colinear="true" x="745.6571428571428" y="774" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="679.9314285714286" y="828" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1dd"><Owner><entfraca ref="1be"/></Owner></rConnector></startConnector><endConnector><rConnector id="1de"><Owner><atrchaveparcial ref="1bb"/></Owner></rConnector></endConnector></lcaf><relfraco id="1df"><children><diamond id="1e0" x="0" y="665" w="127.79676818847656" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="1e1" x="10" y="681.8279428482056"><a><text><string>FOR_MISCONDUCT</string></text></a></t></children></relfraco><llabelUm id="1e2"><points><p colinear="true" x="59.68113273758071" y="665" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="-11" y="246"/><p colinear="true" x="264" y="64"/><p colinear="true" x="678" y="112.24229074889868" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1e3"><Owner><relfraco ref="1df"/></Owner></rConnector></startConnector><endConnector><rConnector id="1e4"><Owner><ent ref="0"/></Owner></rConnector></endConnector></llabelUm><llabelDoubleMuitos id="1e5"><points><p colinear="true" x="81.35600280761719" y="715" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="228" y="925"/><p colinear="true" x="730" y="903"/><p colinear="true" x="764.496644295302" y="774" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1e6"><Owner><relfraco ref="1df"/></Owner></rConnector></startConnector><endConnector><rConnector id="1e7"><Owner><entfraca ref="1be"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>P</string></text></a></llabelDoubleMuitos></figures></drawing>
Index: docs/versioning/er_models/ER_BUILD_BOARD_v2.xml
===================================================================
--- docs/versioning/er_models/ER_BUILD_BOARD_v2.xml	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ docs/versioning/er_models/ER_BUILD_BOARD_v2.xml	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,1 @@
+<drawing><figures><llabelUm id="0"><points><p colinear="true" x="950" y="259.39503426037885" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="880.572265625" y="251.37152760983474" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1"><Owner><relfraco id="2"><children><diamond id="3" x="950" y="240" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="4" x="969.0859375" y="258.015625"><a><text><string>RECIEVES</string></text></a></t></children></relfraco></Owner></rConnector></startConnector><endConnector><rConnector id="5"><Owner><ent id="6"><children><r id="7" x="753" y="224" w="127.572265625" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="8" x="766.9077911376953" y="235.82794284820557"><a><text><string>PROJECT_THREAD</string></text></a></t></children></ent></Owner></rConnector></endConnector></llabelUm><llabelDoubleMuitos id="9"><points><p colinear="true" x="181.04598214285716" y="-219" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/><p colinear="true" x="132" y="15"/><p colinear="true" x="84.41832197473404" y="277" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/></points><startConnector><rConnector id="a"><Owner><rel id="b"><children><diamond id="c" x="116" y="-276" w="142.0390625" h="57"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="d" x="129" y="-254.484375"><a><text><string>IS_MODERATED_BY</string></text></a></t></children></rel></Owner></rConnector></startConnector><endConnector><rConnector id="e"><Owner><ent id="f"><children><r id="10" x="17" y="277" w="127.572265625" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="11" x="34.9599609375" y="290.015625"><a><text><string>TOPIC_THREAD</string></text></a></t></children></ent></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><lcaf id="12"><points><p colinear="true" x="257.12472345132744" y="-219" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/><p colinear="true" x="301.40168694690266" y="-201" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/></points><startConnector><rConnector id="13"><Owner><rel ref="b"/></Owner></rConnector></startConnector><endConnector><rConnector id="14"><Owner><atr id="15" nullable="false" attributeType="VARCHAR2(128)"><children><e id="16" x="286" y="-201" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="17" x="297.25980377197266" y="-199.17205715179443"><a><text><string>Started_at</string></text></a></t></children></atr></Owner></rConnector></endConnector></lcaf><rel ref="b"/><atr ref="15"/><llabelUm id="18"><points><p colinear="true" x="1257.9913793103449" y="174" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1283.2068965517242" y="161" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="19"><Owner><relfraco id="1a"><children><diamond id="1b" x="1161" y="174" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="1c" x="1182.763671875" y="192.015625"><a><text><string>SUBMITS</string></text></a></t></children></relfraco></Owner></rConnector></startConnector><endConnector><rConnector id="1d"><Owner><ent id="1e"><children><r id="1f" x="1282" y="121" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="20" x="1307.2518997192383" y="132.82794284820557"><a><text><string>USER</string></text></a></t></children></ent></Owner></rConnector></endConnector></llabelUm><ent id="21"><children><r id="22" x="272" y="23" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="23" x="288.9358444213867" y="34.827942848205566"><a><text><string>THREAD</string></text></a></t></children></ent><disjuncao id="24"><children><circ id="25" x="369" y="178" w="20" h="20"><a><fillColor><color rgba="#fff5f2e0"/></fillColor></a></circ><tn id="26" x="373" y="179"><a><fontBold><boolean>true</boolean></fontBold><fontSize><double>16</double></fontSize><text><string>d</string></text></a></tn></children></disjuncao><ent ref="6"/><ent ref="f"/><generalizacaoLine id="27"><points><p colinear="true" x="369" y="193.00430401882826" c1x="123" c1y="-103" c2x="123" c2y="-103"/><p colinear="true" x="136.21417038045487" y="277" c1x="123" c1y="-103" c2x="123" c2y="-103"/></points><startConnector><rConnector id="28"><Owner><disjuncao ref="24"/></Owner></rConnector></startConnector><endConnector><rConnector id="29"><Owner><ent ref="f"/></Owner></rConnector></endConnector></generalizacaoLine><generalizacaoLine id="2a"><points><p colinear="true" x="389" y="190.64329703201398" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="753" y="236.04411391370462" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="2b"><Owner><disjuncao ref="24"/></Owner></rConnector></startConnector><endConnector><rConnector id="2c"><Owner><ent ref="6"/></Owner></rConnector></endConnector></generalizacaoLine><rel id="2d"><children><diamond id="2e" x="279" y="357" w="109" h="44"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="2f" x="293.193359375" y="372.015625"><a><text><string>BELONGS_TO</string></text></a></t></children></rel><llabelUm id="30"><points><p colinear="true" x="388" y="363.77609949786313" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="753" y="261.81786677713" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="31"><Owner><rel ref="2d"/></Owner></rConnector></startConnector><endConnector><rConnector id="32"><Owner><ent ref="6"/></Owner></rConnector></endConnector></llabelUm><llabelMuitos id="33"><points><p colinear="true" x="279" y="361.31596845184504" c1x="123" c1y="-103" c2x="123" c2y="-103"/><p colinear="true" x="142.4236613948171" y="317" c1x="123" c1y="-103" c2x="123" c2y="-103"/></points><startConnector><rConnector id="34"><Owner><rel ref="2d"/></Owner></rConnector></startConnector><endConnector><rConnector id="35"><Owner><ent ref="f"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><ent ref="1e"/><llabelDoubleGeneralizacao id="36" labelGeneralizacaoText="caracteristica"><points><p colinear="true" x="373.7844657671289" y="178" c1x="-14.280559426255081" c1y="-40" c2x="-14.280559426255081" c2y="-40"/><p colinear="true" x="321.1532541877228" y="63" c1x="-14.280559426255081" c1y="-40" c2x="-14.280559426255081" c2y="-40"/></points><startConnector><rConnector id="37"><Owner><disjuncao ref="24"/></Owner></rConnector></startConnector><endConnector><rConnector id="38"><Owner><ent ref="21"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleGeneralizacao><ent id="39"><children><r id="3a" x="1379" y="426" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="3b" x="1385.8197708129883" y="437.82794284820557"><a><text><string>DEVELOPER</string></text></a></t></children></ent><generalizacaoLine id="3c"><points><p colinear="true" x="1571.9507813667906" y="100.79204368591309" c1x="400" c1y="499" c2x="400" c2y="499"/><p colinear="true" x="1427.8613705778919" y="426" c1x="400" c1y="499" c2x="400" c2y="499"/></points><startConnector><rConnector id="3d"><Owner><sobreposicao id="3e"><children><circ id="3f" x="1567" y="78" w="20" h="20"><a><fillColor><color rgba="#fff5f2e0"/></fillColor></a></circ><tn id="40" x="1571" y="79"><a><fontBold><boolean>true</boolean></fontBold><fontSize><double>16</double></fontSize><text><string>o</string></text></a></tn></children></sobreposicao></Owner></rConnector></startConnector><endConnector><rConnector id="41"><Owner><ent ref="39"/></Owner></rConnector></endConnector></generalizacaoLine><ent id="42"><children><r id="43" x="1521" y="320" w="130" h="41"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="44" x="1533.9716796875" y="333.515625"><a><text><string>PROJECT_OWNER</string></text></a></t></children></ent><generalizacaoLine id="45"><points><p colinear="true" x="1577.4084530931743" y="100.79204368591309" c1x="303" c1y="473" c2x="303" c2y="473"/><p colinear="true" x="1585.2652446155807" y="320" c1x="303" c1y="473" c2x="303" c2y="473"/></points><startConnector><rConnector id="46"><Owner><sobreposicao ref="3e"/></Owner></rConnector></startConnector><endConnector><rConnector id="47"><Owner><ent ref="42"/></Owner></rConnector></endConnector></generalizacaoLine><ent id="48"><children><r id="49" x="516" y="592" w="101.861328125" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="4a" x="527.5943908691406" y="603.8279428482056"><a><text><string>PERMISSIONS</string></text></a></t></children></ent><rel id="4b"><children><diamond id="4c" x="521" y="515" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="4d" x="525.8997650146484" y="526.8279428482056"><a><text><string>DEFINED_BY</string></text></a></t></children></rel><llabelMuitos id="4e"><points><p colinear="true" x="562.540432224026" y="555" c1x="-364" c1y="193.66783562549267" c2x="-364" c2y="193.66783562549267"/><p colinear="true" x="565.390231838474" y="592" c1x="-364" c1y="193.66783562549267" c2x="-364" c2y="193.66783562549267"/></points><startConnector><rConnector id="4f"><Owner><rel ref="4b"/></Owner></rConnector></startConnector><endConnector><rConnector id="50"><Owner><ent ref="48"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><entfraca id="51"><children><r id="52" x="523" y="444" w="109.958984375" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="53" x="535.4811935424805" y="455.82794284820557"><a><text><string>CUSTOM_ROLE</string></text></a></t></children></entfraca><llabelDoubleMuitos id="54"><points><p colinear="true" x="565.7829555457746" y="515" c1x="367" c1y="436.66783562549267" c2x="367" c2y="436.66783562549267"/><p colinear="true" x="573.1965366417253" y="484" c1x="367" c1y="436.66783562549267" c2x="367" c2y="436.66783562549267"/></points><startConnector><rConnector id="55"><Owner><rel ref="4b"/></Owner></rConnector></startConnector><endConnector><rConnector id="56"><Owner><entfraca ref="51"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>M</string></text></a></llabelDoubleMuitos><relfraco id="57"><children><diamond id="58" x="616" y="310" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="59" x="638.2498168945312" y="326.82794284820557"><a><text><string>VALID_IN</string></text></a></t></children></relfraco><llabelUm id="5a"><points><p colinear="true" x="706.3368496737637" y="310" c1x="715" c1y="364" c2x="715" c2y="364"/><p colinear="true" x="783.316653073489" y="264" c1x="715" c1y="364" c2x="715" c2y="364"/></points><startConnector><rConnector id="5b"><Owner><relfraco ref="57"/></Owner></rConnector></startConnector><endConnector><rConnector id="5c"><Owner><ent ref="6"/></Owner></rConnector></endConnector></llabelUm><llabelDoubleMuitos id="5d"><points><p colinear="true" x="647.7324597262597" y="360" c1x="400" c1y="499" c2x="400" c2y="499"/><p colinear="true" x="591.3935244064922" y="444" c1x="400" c1y="499" c2x="400" c2y="499"/></points><startConnector><rConnector id="5e"><Owner><relfraco ref="57"/></Owner></rConnector></startConnector><endConnector><rConnector id="5f"><Owner><entfraca ref="51"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><relfraco id="60"><children><diamond id="61" x="774" y="312" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="62" x="810.0751953125" y="330.015625"><a><text><string>HAS</string></text></a></t></children></relfraco><llabelUm id="63"><points><p colinear="true" x="820.9640141969086" y="312" c1x="527" c1y="244" c2x="527" c2y="244"/><p colinear="true" x="818.0149214549731" y="264" c1x="527" c1y="244" c2x="527" c2y="244"/></points><startConnector><rConnector id="64"><Owner><relfraco ref="60"/></Owner></rConnector></startConnector><endConnector><rConnector id="65"><Owner><ent ref="6"/></Owner></rConnector></endConnector></llabelUm><entfraca id="66"><children><r id="67" x="728" y="432" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="68" x="740.3277969360352" y="443.82794284820557"><a><text><string>CHANNEL</string></text></a></t></children></entfraca><llabelDoubleMuitos id="69"><points><p colinear="true" x="810.6521739130435" y="362" c1x="212" c1y="379" c2x="212" c2y="379"/><p colinear="true" x="777.4782608695652" y="432" c1x="212" c1y="379" c2x="212" c2y="379"/></points><startConnector><rConnector id="6a"><Owner><relfraco ref="60"/></Owner></rConnector></startConnector><endConnector><rConnector id="6b"><Owner><entfraca ref="66"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><rel id="6c"><children><diamond id="6d" x="958" y="541" w="115.37890625" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="6e" x="977.4811782836914" y="552.8279428482056"><a><text><string>CONSTRUCTS</string></text></a></t></children></rel><llabelDoubleMuitos id="6f"><points><p colinear="true" x="970.2418470470184" y="541" c1x="842" c1y="229" c2x="842" c2y="229"/><p colinear="true" x="808" y="469.6026873368712" c1x="842" c1y="229" c2x="842" c2y="229"/></points><startConnector><rConnector id="70"><Owner><rel ref="6c"/></Owner></rConnector></startConnector><endConnector><rConnector id="71"><Owner><entfraca ref="66"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="72"><points><p colinear="true" x="1073.37890625" y="544.5504249497567" c1x="-254.06871916118416" c1y="253" c2x="-254.06871916118416" c2y="253"/><p colinear="true" x="1379" y="457.40560304123585" c1x="-254.06871916118416" c1y="253" c2x="-254.06871916118416" c2y="253"/></points><startConnector><rConnector id="73"><Owner><rel ref="6c"/></Owner></rConnector></startConnector><endConnector><rConnector id="74"><Owner><ent ref="39"/></Owner></rConnector></endConnector></llabelUm><rel id="75"><children><diamond id="76" x="831" y="-93" w="123" h="41"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="77" x="844.810546875" y="-79.484375"><a><text><string>IS_CREATED_BY</string></text></a></t></children></rel><llabelDoubleMuitos id="78"><points><p colinear="true" x="831" y="-70.00529100529101" c1x="68" c1y="191" c2x="68" c2y="191"/><p colinear="true" x="609" y="-61"/><p colinear="true" x="352" y="28.993265993265993" c1x="68" c1y="191" c2x="68" c2y="191"/></points><startConnector><rConnector id="79"><Owner><rel ref="75"/></Owner></rConnector></startConnector><endConnector><rConnector id="7a"><Owner><ent ref="21"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="7b"><points><p colinear="true" x="933.7400468384075" y="-52" c1x="527" c1y="244" c2x="527" c2y="244"/><p colinear="true" x="1282" y="121.11641443538998" c1x="527" c1y="244" c2x="527" c2y="244"/></points><startConnector><rConnector id="7c"><Owner><rel ref="75"/></Owner></rConnector></startConnector><endConnector><rConnector id="7d"><Owner><ent ref="1e"/></Owner></rConnector></endConnector></llabelUm><ent id="7e"><children><r id="7f" x="1210" y="-271" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="80" x="1212.8357391357422" y="-259.17205715179443"><a><text><string>MODERATOR</string></text></a></t></children></ent><sobreposicao ref="3e"/><generalizacaoLine id="81"><points><p colinear="true" x="1567" y="78.98635756641353" c1x="-502.29203539823015" c1y="338" c2x="-502.29203539823015" c2y="338"/><p colinear="true" x="1269.212915487647" y="-231" c1x="-502.29203539823015" c1y="338" c2x="-502.29203539823015" c2y="338"/></points><startConnector><rConnector id="82"><Owner><sobreposicao ref="3e"/></Owner></rConnector></startConnector><endConnector><rConnector id="83"><Owner><ent ref="7e"/></Owner></rConnector></endConnector></generalizacaoLine><lcaf id="84"><points><p colinear="true" x="1362" y="132.9052583283069" c1x="-186" c1y="359.3731343283582" c2x="-186" c2y="359.3731343283582"/><p colinear="true" x="1567" y="91.41970726087982" c1x="-186" c1y="359.3731343283582" c2x="-186" c2y="359.3731343283582"/></points><startConnector><rConnector id="85"><Owner><ent ref="1e"/></Owner></rConnector></startConnector><endConnector><rConnector id="86"><Owner><sobreposicao ref="3e"/></Owner></rConnector></endConnector></lcaf><rel id="87"><children><diamond id="88" x="592" y="237" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="89" x="607.7099609375" y="250.015625"><a><text><string>REPLIES</string></text></a></t></children></rel><atrchaveparcial id="8a" nullable="false" attributeType="NUMBER"><children><e id="8b" x="359" y="447" w="125" h="32.33216437450733"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="8c" x="403.8298797607422" y="454.99402503545923"><a><strokeDashes><doubleArray><double>3</double></doubleArray></strokeDashes><fontBold><boolean>true</boolean></fontBold><text><string>Name</string></text></a></t></children></atrchaveparcial><atrchave id="8d" nullable="false" attributeType="NUMBER"><children><e id="8e" x="510" y="666" w="60" h="24"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="8f" x="522.3298797607422" y="669.8279428482056"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>Name</string></text></a></t></children></atrchave><lcaf id="90"><points><p colinear="true" x="544.896484375" y="666" c1x="20" c1y="111.66783562549267" c2x="20" c2y="111.66783562549267"/><p colinear="true" x="558.7698567708334" y="632" c1x="20" c1y="111.66783562549267" c2x="20" c2y="111.66783562549267"/></points><startConnector><rConnector id="91"><Owner><atrchave ref="8d"/></Owner></rConnector></startConnector><endConnector><rConnector id="92"><Owner><ent ref="48"/></Owner></rConnector></endConnector></lcaf><lcaf id="93"><points><p colinear="true" x="484" y="463.4991601041617" c1x="20" c1y="111.66783562549267" c2x="20" c2y="111.66783562549267"/><p colinear="true" x="523" y="463.70700072431237" c1x="20" c1y="111.66783562549267" c2x="20" c2y="111.66783562549267"/></points><startConnector><rConnector id="94"><Owner><atrchaveparcial ref="8a"/></Owner></rConnector></startConnector><endConnector><rConnector id="95"><Owner><entfraca ref="51"/></Owner></rConnector></endConnector></lcaf><atrchave id="96" nullable="false" attributeType="NUMBER"><children><e id="97" x="1293" y="61" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="98" x="1302.3097915649414" y="62.827942848205566"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>Username</string></text></a></t></children></atrchave><lcaf id="99"><points><p colinear="true" x="1331.4285714285713" y="81" c1x="928.6101694915254" c1y="-289" c2x="928.6101694915254" c2y="-289"/><p colinear="true" x="1325.142857142857" y="121" c1x="928.6101694915254" c1y="-289" c2x="928.6101694915254" c2y="-289"/></points><startConnector><rConnector id="9a"><Owner><atrchave ref="96"/></Owner></rConnector></startConnector><endConnector><rConnector id="9b"><Owner><ent ref="1e"/></Owner></rConnector></endConnector></lcaf><atr id="9c" nullable="false" attributeType="VARCHAR2(128)"><children><e id="9d" x="1388" y="59" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="9e" x="1400.741798400879" y="60.827942848205566"><a><text><string>Password</string></text></a></t></children></atr><lcaf id="9f"><points><p colinear="true" x="1413.2777777777778" y="79" c1x="928.6101694915254" c1y="-289" c2x="928.6101694915254" c2y="-289"/><p colinear="true" x="1351.4444444444443" y="121" c1x="928.6101694915254" c1y="-289" c2x="928.6101694915254" c2y="-289"/></points><startConnector><rConnector id="a0"><Owner><atr ref="9c"/></Owner></rConnector></startConnector><endConnector><rConnector id="a1"><Owner><ent ref="1e"/></Owner></rConnector></endConnector></lcaf><atr id="a2" nullable="false" attributeType="VARCHAR2(128)"><children><e id="a3" x="157" y="52" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="a4" x="173.1376953125" y="55.015625"><a><text><string>Content</string></text></a></t></children></atr><lcaf id="a5"><points><p colinear="true" x="237" y="55.391304347826086" c1x="-91" c1y="-14" c2x="-91" c2y="-14"/><p colinear="true" x="272" y="49.60869565217391" c1x="-91" c1y="-14" c2x="-91" c2y="-14"/></points><startConnector><rConnector id="a6"><Owner><atr ref="a2"/></Owner></rConnector></startConnector><endConnector><rConnector id="a7"><Owner><ent ref="21"/></Owner></rConnector></endConnector></lcaf><rel id="a8"><children><diamond id="a9" x="997" y="397" w="127.84867858886719" h="48"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="aa" x="1003.4614486694336" y="414.015625"><a><text><string>ASSOCIATED_WITH</string></text></a></t></children></rel><llabelMuitos id="ab"><points><p colinear="true" x="1027.8208536697646" y="397" c1x="368" c1y="39" c2x="368" c2y="39"/><p colinear="true" x="844.3723708330575" y="264" c1x="368" c1y="39" c2x="368" c2y="39"/></points><startConnector><rConnector id="ac"><Owner><rel ref="a8"/></Owner></rConnector></startConnector><endConnector><rConnector id="ad"><Owner><ent ref="6"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><llabelMuitos id="ae"><points><p colinear="true" x="1124.8486785888672" y="425.463046941565" c1x="53" c1y="174" c2x="53" c2y="174"/><p colinear="true" x="1379" y="443.2072941287616" c1x="53" c1y="174" c2x="53" c2y="174"/></points><startConnector><rConnector id="af"><Owner><rel ref="a8"/></Owner></rConnector></startConnector><endConnector><rConnector id="b0"><Owner><ent ref="39"/></Owner></rConnector></endConnector><a><text><string>M</string></text></a></llabelMuitos><atr id="b1" nullable="false" attributeType="VARCHAR2(128)"><children><e id="b2" x="1349" y="83" w="86" h="30"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="b3" x="1353.4737243652344" y="89.82794284820557"><a><text><string>Register_date</string></text></a></t></children></atr><lcaf id="b4"><points><p colinear="true" x="1367.5813953488373" y="113" c1x="928.6101694915254" c1y="-289" c2x="928.6101694915254" c2y="-289"/><p colinear="true" x="1354.5581395348838" y="121" c1x="928.6101694915254" c1y="-289" c2x="928.6101694915254" c2y="-289"/></points><startConnector><rConnector id="b5"><Owner><atr ref="b1"/></Owner></rConnector></startConnector><endConnector><rConnector id="b6"><Owner><ent ref="1e"/></Owner></rConnector></endConnector></lcaf><atrchaveparcial id="b7" nullable="false" attributeType="NUMBER"><children><e id="b8" x="799" y="403" w="66" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="b9" x="814.3298797607422" y="404.82794284820557"><a><strokeDashes><doubleArray><double>3</double></doubleArray></strokeDashes><fontBold><boolean>true</boolean></fontBold><text><string>Name</string></text></a></t></children></atrchaveparcial><lcaf id="ba"><points><p colinear="true" x="800.8205128205128" y="432" c1x="-429" c1y="57" c2x="-429" c2y="57"/><p colinear="true" x="815.5897435897436" y="423" c1x="-429" c1y="57" c2x="-429" c2y="57"/></points><startConnector><rConnector id="bb"><Owner><entfraca ref="66"/></Owner></rConnector></startConnector><endConnector><rConnector id="bc"><Owner><atrchaveparcial ref="b7"/></Owner></rConnector></endConnector></lcaf><rel id="bd"><children><diamond id="be" x="905" y="623" w="141.78884887695312" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="bf" x="918.2040252685547" y="634.8279428482056"><a><text><string>SENDS_MESSAGE_IN</string></text></a></t></children></rel><llabelMuitos id="c0"><points><p colinear="true" x="954.1253747590549" y="623" c1x="299.23095032057836" c1y="-33" c2x="299.23095032057836" c2y="-33"/><p colinear="true" x="789.7690496794216" y="472" c1x="299.23095032057836" c1y="-33" c2x="299.23095032057836" c2y="-33"/></points><startConnector><rConnector id="c1"><Owner><rel ref="bd"/></Owner></rConnector></startConnector><endConnector><rConnector id="c2"><Owner><entfraca ref="66"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><atr id="c3" nullable="false" attributeType="VARCHAR2(128)"><children><e id="c4" x="967" y="683" w="80" h="23"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="c5" x="983.6328125" y="687.515625"><a><text><string>Msg_txt</string></text></a></t></children></atr><lcaf id="c6"><points><p colinear="true" x="987.9742596080002" y="663" c1x="305" c1y="76" c2x="305" c2y="76"/><p colinear="true" x="1000.0540947775239" y="683" c1x="305" c1y="76" c2x="305" c2y="76"/></points><startConnector><rConnector id="c7"><Owner><rel ref="bd"/></Owner></rConnector></startConnector><endConnector><rConnector id="c8"><Owner><atr ref="c3"/></Owner></rConnector></endConnector></lcaf><atr id="c9" nullable="false" attributeType="VARCHAR2(128)"><children><e id="ca" x="904" y="457" w="168.57302856445312" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="cb" x="925.4840850830078" y="458.82794284820557"><a><text><string>Started_involvment_at</string></text></a></t></children></atr><lcaf id="cc"><points><p colinear="true" x="1004.0773458066194" y="457" c1x="-315" c1y="135" c2x="-315" c2y="135"/><p colinear="true" x="1023.0263436358908" y="445" c1x="-315" c1y="135" c2x="-315" c2y="135"/></points><startConnector><rConnector id="cd"><Owner><atr ref="c9"/></Owner></rConnector></startConnector><endConnector><rConnector id="ce"><Owner><rel ref="a8"/></Owner></rConnector></endConnector></lcaf><atr id="cf" nullable="false" attributeType="VARCHAR2(128)"><children><e id="d0" x="1034" y="484" w="168.57302856445312" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="d1" x="1061.2681274414062" y="485.82794284820557"><a><text><string>Ended_involment_at</string></text></a></t></children></atr><lcaf id="d2"><points><p colinear="true" x="1110.428682092118" y="484" c1x="-315" c1y="135" c2x="-315" c2y="135"/><p colinear="true" x="1079.7831365506943" y="445" c1x="-315" c1y="135" c2x="-315" c2y="135"/></points><startConnector><rConnector id="d3"><Owner><atr ref="cf"/></Owner></rConnector></startConnector><endConnector><rConnector id="d4"><Owner><rel ref="a8"/></Owner></rConnector></endConnector></lcaf><t id="d5" x="1499" y="514"><a><text><null/></text></a></t><atr id="d6" nullable="false" attributeType="VARCHAR2(128)"><children><e id="d7" x="878" y="678" w="80" h="23"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="d8" x="884.3232421875" y="682.515625"><a><text><string>Timestamp</string></text></a></t></children></atr><lcaf id="d9"><points><p colinear="true" x="950.9935967230027" y="663" c1x="305" c1y="76" c2x="305" c2y="76"/><p colinear="true" x="932.3179759363975" y="678" c1x="305" c1y="76" c2x="305" c2y="76"/></points><startConnector><rConnector id="da"><Owner><rel ref="bd"/></Owner></rConnector></startConnector><endConnector><rConnector id="db"><Owner><atr ref="d6"/></Owner></rConnector></endConnector></lcaf><ent id="dc"><children><r id="dd" x="490" y="-198" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="de" x="518.4619140625" y="-186.17205715179443"><a><text><string>TAG</string></text></a></t></children></ent><rel id="df"><children><diamond id="e0" x="773" y="-213" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="e1" x="785.4814453125" y="-199.984375"><a><text><string>CREATES</string></text></a></t></children></rel><llabelUm id="e2"><points><p colinear="true" x="853" y="-198.30892448512586" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/><p colinear="true" x="1210" y="-245.69107551487414" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/></points><startConnector><rConnector id="e3"><Owner><rel ref="df"/></Owner></rConnector></startConnector><endConnector><rConnector id="e4"><Owner><ent ref="7e"/></Owner></rConnector></endConnector></llabelUm><rel id="e5"><children><diamond id="e6" x="252" y="-146" w="115.53266906738281" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="e7" x="263.5300064086914" y="-132.984375"><a><text><string>ASSISGNED_TO</string></text></a></t></children></rel><llabelMuitos id="e8"><points><p colinear="true" x="310.0306736421303" y="-106" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/><p colinear="true" x="311.7356608915611" y="23" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/></points><startConnector><rConnector id="e9"><Owner><rel ref="e5"/></Owner></rConnector></startConnector><endConnector><rConnector id="ea"><Owner><ent ref="21"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><atrchave id="eb" nullable="false" attributeType="NUMBER"><children><e id="ec" x="495" y="-137" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="ed" x="515.6083984375" y="-133.984375"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>Name</string></text></a></t></children></atrchave><lcaf id="ee"><points><p colinear="true" x="531.9607843137255" y="-158" c1x="-597" c1y="-116" c2x="-597" c2y="-116"/><p colinear="true" x="534.0196078431372" y="-137" c1x="-597" c1y="-116" c2x="-597" c2y="-116"/></points><startConnector><rConnector id="ef"><Owner><ent ref="dc"/></Owner></rConnector></startConnector><endConnector><rConnector id="f0"><Owner><atrchave ref="eb"/></Owner></rConnector></endConnector></lcaf><atr id="f1" nullable="false" attributeType="VARCHAR2(128)"><children><e id="f2" x="710" y="375" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="f3" x="717.7137680053711" y="376.82794284820557"><a><text><string>Description</string></text></a></t></children></atr><lcaf id="f4"><points><p colinear="true" x="762.6268656716418" y="432" c1x="-429" c1y="57" c2x="-429" c2y="57"/><p colinear="true" x="752.6865671641791" y="395" c1x="-429" c1y="57" c2x="-429" c2y="57"/></points><startConnector><rConnector id="f5"><Owner><entfraca ref="66"/></Owner></rConnector></startConnector><endConnector><rConnector id="f6"><Owner><atr ref="f1"/></Owner></rConnector></endConnector></lcaf><rel id="f7"><children><diamond id="f8" x="763" y="146" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="f9" x="786.353515625" y="159.015625"><a><text><string>LIKES</string></text></a></t></children></rel><llabelMuitos id="fa"><points><p colinear="true" x="763" y="166.18867924528303" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/><p colinear="true" x="591" y="167"/><p colinear="true" x="352" y="60.77777777777778" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/></points><startConnector><rConnector id="fb"><Owner><rel ref="f7"/></Owner></rConnector></startConnector><endConnector><rConnector id="fc"><Owner><ent ref="21"/></Owner></rConnector></endConnector><a><text><string>N</string></text></a></llabelMuitos><atr id="fd" nullable="false" attributeType="VARCHAR2(128)"><children><e id="fe" x="1383" y="183" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="ff" x="1399.0358352661133" y="184.82794284820557"><a><text><string>Is_active</string></text></a></t></children></atr><lcaf id="100"><points><p colinear="true" x="1403.576923076923" y="183" c1x="578" c1y="-321" c2x="578" c2y="-321"/><p colinear="true" x="1360.8461538461538" y="161" c1x="578" c1y="-321" c2x="578" c2y="-321"/></points><startConnector><rConnector id="101"><Owner><atr ref="fd"/></Owner></rConnector></startConnector><endConnector><rConnector id="102"><Owner><ent ref="1e"/></Owner></rConnector></endConnector></lcaf><atr id="103" nullable="false" attributeType="VARCHAR2(128)"><children><e id="104" x="546" y="57" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="105" x="553.7137680053711" y="58.827942848205566"><a><text><string>Description</string></text></a></t></children></atr><atr id="106" nullable="false" attributeType="VARCHAR2(128)"><children><e id="107" x="637" y="85" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="108" x="659.4258804321289" y="86.82794284820557"><a><text><string>Status</string></text></a></t></children></atr><llabelDoubleMuitos id="109"><points><p colinear="true" x="773" y="-190.8798586572438" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/><p colinear="true" x="570" y="-180.1201413427562" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/></points><startConnector><rConnector id="10a"><Owner><rel ref="df"/></Owner></rConnector></startConnector><endConnector><rConnector id="10b"><Owner><ent ref="dc"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><atr id="10c" nullable="false" attributeType="VARCHAR2(128)"><children><e id="10d" x="668" y="48" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="10e" x="677.5437850952148" y="49.827942848205566"><a><text><string>Created_at</string></text></a></t></children></atr><atr id="10f" nullable="false" attributeType="VARCHAR2(128)"><children><e id="110" x="1373" y="148" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="111" x="1403.147933959961" y="149.82794284820557"><a><text><string>Sex</string></text></a></t></children></atr><atr id="112" nullable="false" attributeType="VARCHAR2(128)"><children><e id="113" x="1327" y="30" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="114" x="1334.713768005371" y="31.827942848205566"><a><text><string>Description</string></text></a></t></children></atr><lcaf id="115"><points><p colinear="true" x="1373" y="150.52747252747253" c1x="578" c1y="-321" c2x="578" c2y="-321"/><p colinear="true" x="1362" y="148.47252747252747" c1x="578" c1y="-321" c2x="578" c2y="-321"/></points><startConnector><rConnector id="116"><Owner><atr ref="10f"/></Owner></rConnector></startConnector><endConnector><rConnector id="117"><Owner><ent ref="1e"/></Owner></rConnector></endConnector></lcaf><lcaf id="118"><points><p colinear="true" x="1362.5445544554455" y="50" c1x="578" c1y="-321" c2x="578" c2y="-321"/><p colinear="true" x="1330.9108910891089" y="121" c1x="578" c1y="-321" c2x="578" c2y="-321"/></points><startConnector><rConnector id="119"><Owner><atr ref="112"/></Owner></rConnector></startConnector><endConnector><rConnector id="11a"><Owner><ent ref="1e"/></Owner></rConnector></endConnector></lcaf><atr id="11b" nullable="false" attributeType="VARCHAR2(128)"><children><e id="11c" x="-28" y="349" w="84" h="32.32557971989934"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="11d" x="-15.760215759277344" y="356.99073270815524"><a><text><string>Guidelines</string></text></a></t></children></atr><lcaf id="11e"><points><p colinear="true" x="29.8363563525644" y="349" c1x="-315" c1y="22" c2x="-315" c2y="22"/><p colinear="true" x="61.19006494329399" y="317" c1x="-315" c1y="22" c2x="-315" c2y="22"/></points><startConnector><rConnector id="11f"><Owner><atr ref="11b"/></Owner></rConnector></startConnector><endConnector><rConnector id="120"><Owner><ent ref="f"/></Owner></rConnector></endConnector></lcaf><atrchaveparcial id="121" nullable="false" attributeType="NUMBER"><children><e id="122" x="705" y="-40" w="45" h="27"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="123" x="721.4009628295898" y="-34.672057151794434"><a><strokeDashes><doubleArray><double>3</double></doubleArray></strokeDashes><fontBold><boolean>true</boolean></fontBold><text><string>Id</string></text></a></t></children></atrchaveparcial><entfraca id="124"><children><r id="125" x="593" y="-14" w="80" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="126" x="610.5478439331055" y="-2.1720571517944336"><a><text><string>REPORT</string></text></a></t></children></entfraca><relfraco id="127"><children><diamond id="128" x="823" y="70" w="133" h="55"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="129" x="842.195686340332" y="89.32794284820557"><a><text><string>SUBBMITTED_BY</string></text></a></t></children></relfraco><relfraco id="12a"><children><diamond id="12b" x="840" y="5" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="12c" x="867.5" y="23.015625"><a><text><string>ABOUT</string></text></a></t></children></relfraco><llabelDoubleMuitos id="12d"><points><p colinear="true" x="823" y="73.77777777777779" c1x="900.0685714285714" c1y="-577" c2x="900.0685714285714" c2y="-577"/><p colinear="true" x="673" y="20.269005847953217" c1x="900.0685714285714" c1y="-577" c2x="900.0685714285714" c2y="-577"/></points><startConnector><rConnector id="12e"><Owner><relfraco ref="127"/></Owner></rConnector></startConnector><endConnector><rConnector id="12f"><Owner><entfraca ref="124"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>M</string></text></a></llabelDoubleMuitos><llabelDoubleMuitos id="130"><points><p colinear="true" x="840" y="25.444227005870843" c1x="900.0685714285714" c1y="-577" c2x="900.0685714285714" c2y="-577"/><p colinear="true" x="673" y="9.7573385518591" c1x="900.0685714285714" c1y="-577" c2x="900.0685714285714" c2y="-577"/></points><startConnector><rConnector id="131"><Owner><relfraco ref="12a"/></Owner></rConnector></startConnector><endConnector><rConnector id="132"><Owner><entfraca ref="124"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="133"><points><p colinear="true" x="956" y="104.18843930635839" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1282" y="136.97687861271675" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="134"><Owner><relfraco ref="127"/></Owner></rConnector></startConnector><endConnector><rConnector id="135"><Owner><ent ref="1e"/></Owner></rConnector></endConnector></llabelUm><llabelUm id="136"><points><p colinear="true" x="937" y="42.418685121107266" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1282" y="130.75778546712803" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="137"><Owner><relfraco ref="12a"/></Owner></rConnector></startConnector><endConnector><rConnector id="138"><Owner><ent ref="1e"/></Owner></rConnector></endConnector></llabelUm><lcaf id="139"><points><p colinear="true" x="661.8461538461538" y="26" c1x="324" c1y="-601.0071513706794" c2x="324" c2y="-601.0071513706794"/><p colinear="true" x="693.5769230769231" y="48" c1x="324" c1y="-601.0071513706794" c2x="324" c2y="-601.0071513706794"/></points><startConnector><rConnector id="13a"><Owner><entfraca ref="124"/></Owner></rConnector></startConnector><endConnector><rConnector id="13b"><Owner><atr ref="10c"/></Owner></rConnector></endConnector></lcaf><lcaf id="13c"><points><p colinear="true" x="642.8876404494382" y="26" c1x="900.0685714285714" c1y="-577" c2x="900.0685714285714" c2y="-577"/><p colinear="true" x="672.0561797752808" y="85" c1x="900.0685714285714" c1y="-577" c2x="900.0685714285714" c2y="-577"/></points><startConnector><rConnector id="13d"><Owner><entfraca ref="124"/></Owner></rConnector></startConnector><endConnector><rConnector id="13e"><Owner><atr ref="106"/></Owner></rConnector></endConnector></lcaf><lcaf id="13f"><points><p colinear="true" x="617.5901639344262" y="26" c1x="900.0685714285714" c1y="-577" c2x="900.0685714285714" c2y="-577"/><p colinear="true" x="593.7049180327868" y="57" c1x="900.0685714285714" c1y="-577" c2x="900.0685714285714" c2y="-577"/></points><startConnector><rConnector id="140"><Owner><entfraca ref="124"/></Owner></rConnector></startConnector><endConnector><rConnector id="141"><Owner><atr ref="103"/></Owner></rConnector></endConnector></lcaf><lcaf id="142"><points><p colinear="true" x="673" y="-7.756613756613756" c1x="913.0285714285715" c1y="-568" c2x="913.0285714285715" c2y="-568"/><p colinear="true" x="705" y="-18.761904761904766" c1x="913.0285714285715" c1y="-568" c2x="913.0285714285715" c2y="-568"/></points><startConnector><rConnector id="143"><Owner><entfraca ref="124"/></Owner></rConnector></startConnector><endConnector><rConnector id="144"><Owner><atrchaveparcial ref="121"/></Owner></rConnector></endConnector></lcaf><relfraco id="145"><children><diamond id="146" x="408" y="13" w="127.79676818847656" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="147" x="418" y="29.827942848205566"><a><text><string>FOR_MISCONDUCT</string></text></a></t></children></relfraco><llabelUm id="148"><points><p colinear="true" x="408" y="39.998093490944186" c1x="-65.39030456542969" c1y="-141.60966999475397" c2x="-65.39030456542969" c2y="-141.60966999475397"/><p colinear="true" x="352" y="41.74920562122675" c1x="-65.39030456542969" c1y="-141.60966999475397" c2x="-65.39030456542969" c2y="-141.60966999475397"/></points><startConnector><rConnector id="149"><Owner><relfraco ref="145"/></Owner></rConnector></startConnector><endConnector><rConnector id="14a"><Owner><ent ref="21"/></Owner></rConnector></endConnector></llabelUm><atrchave id="14b" nullable="false" attributeType="NUMBER"><children><e id="14c" x="160" y="83" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="14d" x="193.47265625" y="86.015625"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>Id</string></text></a></t></children></atrchave><lcaf id="14e"><points><p colinear="true" x="222.4" y="83" c1x="-459" c1y="-53" c2x="-459" c2y="-53"/><p colinear="true" x="272" y="60.85714285714285" c1x="-459" c1y="-53" c2x="-459" c2y="-53"/></points><startConnector><rConnector id="14f"><Owner><atrchave ref="14b"/></Owner></rConnector></startConnector><endConnector><rConnector id="150"><Owner><ent ref="21"/></Owner></rConnector></endConnector></lcaf><entfraca id="151"><children><r id="152" x="1084" y="258" w="134.52734375" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="153" x="1098.3433074951172" y="269.82794284820557"><a><text><string>PROJECT_REQUEST</string></text></a></t></children></entfraca><relfraco ref="1a"/><llabelDoubleMuitos id="154"><points><p colinear="true" x="1191.070782238924" y="224" c1x="-315" c1y="135" c2x="-315" c2y="135"/><p colinear="true" x="1166.0070460838608" y="258" c1x="-315" c1y="135" c2x="-315" c2y="135"/></points><startConnector><rConnector id="155"><Owner><relfraco ref="1a"/></Owner></rConnector></startConnector><endConnector><rConnector id="156"><Owner><entfraca ref="151"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>P</string></text></a></llabelDoubleMuitos><atrchaveparcial id="157" nullable="false" attributeType="NUMBER"><children><e id="158" x="1056" y="331" w="61" h="27"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="159" x="1079.97265625" y="337.515625"><a><strokeDashes><doubleArray><double>3</double></doubleArray></strokeDashes><fontBold><boolean>true</boolean></fontBold><text><string>Id</string></text></a></t></children></atrchaveparcial><lcaf id="15a"><points><p colinear="true" x="1099.6475123355262" y="331" c1x="-315" c1y="135" c2x="-315" c2y="135"/><p colinear="true" x="1131.7858758223683" y="298" c1x="-315" c1y="135" c2x="-315" c2y="135"/></points><startConnector><rConnector id="15b"><Owner><atrchaveparcial ref="157"/></Owner></rConnector></startConnector><endConnector><rConnector id="15c"><Owner><entfraca ref="151"/></Owner></rConnector></endConnector></lcaf><relfraco ref="2"/><llabelDoubleMuitos id="15d"><points><p colinear="true" x="1047" y="269.1272901617337" c1x="-315" c1y="135" c2x="-315" c2y="135"/><p colinear="true" x="1084" y="272.27594451192226" c1x="-315" c1y="135" c2x="-315" c2y="135"/></points><startConnector><rConnector id="15e"><Owner><relfraco ref="2"/></Owner></rConnector></startConnector><endConnector><rConnector id="15f"><Owner><entfraca ref="151"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><atr id="160" nullable="false" attributeType="VARCHAR2(128)"><children><e id="161" x="1149" y="348" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="162" x="1169.880859375" y="351.015625"><a><text><string>Status</string></text></a></t></children></atr><lcaf id="163"><points><p colinear="true" x="1184.282958984375" y="348" c1x="-356" c1y="135" c2x="-356" c2y="135"/><p colinear="true" x="1160.69775390625" y="298" c1x="-356" c1y="135" c2x="-356" c2y="135"/></points><startConnector><rConnector id="164"><Owner><atr ref="160"/></Owner></rConnector></startConnector><endConnector><rConnector id="165"><Owner><entfraca ref="151"/></Owner></rConnector></endConnector></lcaf><atr id="166" nullable="false" attributeType="VARCHAR2(128)"><children><e id="167" x="1240" y="324" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="168" x="1245.828125" y="327.015625"><a><text><string>Description</string></text></a></t></children></atr><lcaf id="169"><points><p colinear="true" x="1257.0113699776787" y="324" c1x="-315" c1y="135" c2x="-315" c2y="135"/><p colinear="true" x="1197.240931919643" y="298" c1x="-315" c1y="135" c2x="-315" c2y="135"/></points><startConnector><rConnector id="16a"><Owner><atr ref="166"/></Owner></rConnector></startConnector><endConnector><rConnector id="16b"><Owner><entfraca ref="151"/></Owner></rConnector></endConnector></lcaf><atr id="16c" nullable="false" attributeType="VARCHAR2(128)"><children><e id="16d" x="80" y="388" w="127" h="34"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="16e" x="90.31562042236328" y="396.82794284820557"><a><text><string>Next_discussion_id</string></text></a></t></children></atr><lcaf id="16f"><points><p colinear="true" x="133.62837275752312" y="388" c1x="-315" c1y="22" c2x="-315" c2y="22"/><p colinear="true" x="92.3998119212963" y="317" c1x="-315" c1y="22" c2x="-315" c2y="22"/></points><startConnector><rConnector id="170"><Owner><atr ref="16c"/></Owner></rConnector></startConnector><endConnector><rConnector id="171"><Owner><ent ref="f"/></Owner></rConnector></endConnector></lcaf><atr id="172" nullable="false" attributeType="VARCHAR2(128)"><children><e id="173" x="1058" y="-76" w="55" h="18"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="174" x="1064.8058547973633" y="-75.17205715179443"><a><text><string>Reason</string></text></a></t></children></atr><rel id="175"><children><diamond id="176" x="885" y="753" w="119" h="66"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="177" x="904.8818359375" y="779.015625"><a><text><string>IS_ASSIGNED</string></text></a></t></children></rel><llabelMuitos id="178"><points><p colinear="true" x="990.554411764706" y="753" c1x="-315" c1y="135" c2x="-315" c2y="135"/><p colinear="true" x="1391.0882352941176" y="466" c1x="-315" c1y="135" c2x="-315" c2y="135"/></points><startConnector><rConnector id="179"><Owner><rel ref="175"/></Owner></rConnector></startConnector><endConnector><rConnector id="17a"><Owner><ent ref="39"/></Owner></rConnector></endConnector><a><text><string>M</string></text></a></llabelMuitos><llabelMuitos id="17b"><points><p colinear="true" x="906.9373392614518" y="753" c1x="-315" c1y="135" c2x="-315" c2y="135"/><p colinear="true" x="600.7447411199535" y="484" c1x="-315" c1y="135" c2x="-315" c2y="135"/></points><startConnector><rConnector id="17c"><Owner><rel ref="175"/></Owner></rConnector></startConnector><endConnector><rConnector id="17d"><Owner><entfraca ref="51"/></Owner></rConnector></endConnector><a><text><string>P</string></text></a></llabelMuitos><rel id="17e"><children><diamond id="17f" x="180" y="283" w="80" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="180" x="188.763671875" y="296.015625"><a><text><string>CONTAINS</string></text></a></t></children></rel><llabelUm id="181"><points><p colinear="true" x="180" y="301.27603381151135" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/><p colinear="true" x="144.572265625" y="299.7491284065799" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/></points><startConnector><rConnector id="182"><Owner><rel ref="17e"/></Owner></rConnector></startConnector><endConnector><rConnector id="183"><Owner><ent ref="f"/></Owner></rConnector></endConnector></llabelUm><ent id="184"><children><r id="185" x="291" y="262" w="150.4765625" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor></a></r><t id="186" x="301" y="275.015625"><a><text><string>DISCUSSION_THREAD</string></text></a></t></children></ent><llabelDoubleMuitos id="187"><points><p colinear="true" x="260" y="297.25594999599326" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/><p colinear="true" x="291" y="292.80431124288805" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/></points><startConnector><rConnector id="188"><Owner><rel ref="17e"/></Owner></rConnector></startConnector><endConnector><rConnector id="189"><Owner><ent ref="184"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>P</string></text></a></llabelDoubleMuitos><generalizacaoLine id="18a"><points><p colinear="true" x="377.4295185960366" y="200.7920436859131" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/><p colinear="true" x="368.99447358730066" y="262" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/></points><startConnector><rConnector id="18b"><Owner><disjuncao ref="24"/></Owner></rConnector></startConnector><endConnector><rConnector id="18c"><Owner><ent ref="184"/></Owner></rConnector></endConnector></generalizacaoLine><llabelGeneralizacao id="18d" labelGeneralizacaoText="submitter(1)"><points><p colinear="true" x="592" y="253.69421487603307" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/><p colinear="true" x="511" y="247"/><p colinear="true" x="441.4765625" y="263.80914217868803" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/></points><startConnector><rConnector id="18e"><Owner><rel ref="87"/></Owner></rConnector></startConnector><endConnector><rConnector id="18f"><Owner><ent ref="184"/></Owner></rConnector></endConnector></llabelGeneralizacao><llabelGeneralizacao id="190" labelGeneralizacaoText="reply(N)"><points><p colinear="true" x="592" y="275.62068965517244" c1x="58.523792613636374" c1y="-284.27322404371586" c2x="58.523792613636374" c2y="-284.27322404371586"/><p colinear="true" x="516" y="311"/><p colinear="true" x="441.4765625" y="296.56921150786405" c1x="58.523792613636374" c1y="-284.27322404371586" c2x="58.523792613636374" c2y="-284.27322404371586"/></points><startConnector><rConnector id="191"><Owner><rel ref="87"/></Owner></rConnector></startConnector><endConnector><rConnector id="192"><Owner><ent ref="184"/></Owner></rConnector></endConnector></llabelGeneralizacao><llabelMuitos id="193"><points><p colinear="true" x="258.0390625" y="-247.73384094692474" c1x="-6.0390625" c1y="57.45817363657696" c2x="-6.0390625" c2y="57.45817363657696"/><p colinear="true" x="1210" y="-250.86829485196034" c1x="-6.0390625" c1y="57.45817363657696" c2x="-6.0390625" c2y="57.45817363657696"/></points><startConnector><rConnector id="194"><Owner><rel ref="b"/></Owner></rConnector></startConnector><endConnector><rConnector id="195"><Owner><ent ref="7e"/></Owner></rConnector></endConnector><a><text><string>R</string></text></a></llabelMuitos><rel id="196"><children><diamond id="197" x="176" y="166" w="134.92578125" h="40"><a><fillColor><color rgba="#ffddddff"/></fillColor></a></diamond><t id="198" x="205.0634765625" y="179.015625"><a><text><string>IS_CHILD_TO</string></text></a></t></children></rel><llabelGeneralizacao id="199" labelGeneralizacaoText="root_topic(1)"><points><p colinear="true" x="214.1517630912162" y="206" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/><p colinear="true" x="110.09726034628378" y="277" c1x="-345" c1y="-1" c2x="-345" c2y="-1"/></points><startConnector><rConnector id="19a"><Owner><rel ref="196"/></Owner></rConnector></startConnector><endConnector><rConnector id="19b"><Owner><ent ref="f"/></Owner></rConnector></endConnector></llabelGeneralizacao><llabelGeneralizacao id="19c" labelGeneralizacaoText="child_topic(N)"><points><p colinear="true" x="206.03829033430233" y="166" c1x="-93.47597714208166" c1y="-13.646519097217777" c2x="-93.47597714208166" c2y="-13.646519097217777"/><p colinear="true" x="163" y="143"/><p colinear="true" x="91.46325842126625" y="277" c1x="-93.47597714208166" c1y="-13.646519097217777" c2x="-93.47597714208166" c2y="-13.646519097217777"/></points><startConnector><rConnector id="19d"><Owner><rel ref="196"/></Owner></rConnector></startConnector><endConnector><rConnector id="19e"><Owner><ent ref="f"/></Owner></rConnector></endConnector></llabelGeneralizacao><atr id="19f" nullable="false" attributeType="VARCHAR2(128)"><children><e id="1a0" x="-64" y="316" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="1a1" x="-37.04296875" y="319.015625"><a><text><string>Title</string></text></a></t></children></atr><lcaf id="1a2"><points><p colinear="true" x="12.133149245689665" y="316" c1x="-315" c1y="22" c2x="-315" c2y="22"/><p colinear="true" x="17" y="314.6530787224723" c1x="-315" c1y="22" c2x="-315" c2y="22"/></points><startConnector><rConnector id="1a3"><Owner><atr ref="19f"/></Owner></rConnector></startConnector><endConnector><rConnector id="1a4"><Owner><ent ref="f"/></Owner></rConnector></endConnector></lcaf><atr id="1a5" nullable="false" attributeType="VARCHAR2(128)"><children><e id="1a6" x="884" y="198" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="1a7" x="910.95703125" y="201.015625"><a><text><string>Title</string></text></a></t></children></atr><lcaf id="1a8"><points><p colinear="true" x="894.2183702256945" y="218" c1x="21.427734375" c1y="-105" c2x="21.427734375" c2y="-105"/><p colinear="true" x="876.3493923611111" y="224" c1x="21.427734375" c1y="-105" c2x="21.427734375" c2y="-105"/></points><startConnector><rConnector id="1a9"><Owner><atr ref="1a5"/></Owner></rConnector></startConnector><endConnector><rConnector id="1aa"><Owner><ent ref="6"/></Owner></rConnector></endConnector></lcaf><llabelMuitos id="1ab"><points><p colinear="true" x="843" y="164.07321772639693" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1282" y="142.92678227360307" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1ac"><Owner><rel ref="f7"/></Owner></rConnector></startConnector><endConnector><rConnector id="1ad"><Owner><ent ref="1e"/></Owner></rConnector></endConnector><a><text><string>P</string></text></a></llabelMuitos><llabelDoubleMuitos id="1ae"><points><p colinear="true" x="535.7967681884766" y="25.307710853678067" c1x="-574.7967681884766" c1y="493" c2x="-574.7967681884766" c2y="493"/><p colinear="true" x="593" y="13.94529584823501" c1x="-574.7967681884766" c1y="493" c2x="-574.7967681884766" c2y="493"/></points><startConnector><rConnector id="1af"><Owner><relfraco ref="145"/></Owner></rConnector></startConnector><endConnector><rConnector id="1b0"><Owner><entfraca ref="124"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelMuitos id="1b1"><points><p colinear="true" x="367.5326690673828" y="-139.63937429544114" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="490" y="-168.55548571288617" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1b2"><Owner><rel ref="e5"/></Owner></rConnector></startConnector><endConnector><rConnector id="1b3"><Owner><ent ref="dc"/></Owner></rConnector></endConnector><a><text><string>M</string></text></a></llabelMuitos><atr id="1b4" nullable="false" attributeType="VARCHAR2(128)"><children><e id="1b5" x="651" y="190" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="1b6" x="664.7236328125" y="193.015625"><a><text><string>Repo_url</string></text></a></t></children></atr><lcaf id="1b7"><points><p colinear="true" x="719.5877574573864" y="210" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="759.6106178977273" y="224" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1b8"><Owner><atr ref="1b4"/></Owner></rConnector></startConnector><endConnector><rConnector id="1b9"><Owner><ent ref="6"/></Owner></rConnector></endConnector></lcaf><entfraca id="1ba"><children><r id="1bb" x="1192" y="-100" w="139.689453125" h="40"><a><fillColor><color rgba="#ffebffe8"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></r><t id="1bc" x="1206.5243530273438" y="-88.17205715179443"><a><text><string>BLACKLISTED_USER</string></text></a></t></children></entfraca><relfraco id="1bd"><children><diamond id="1be" x="1185" y="-206" w="122.931640625" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="1bf" x="1195" y="-187.984375"><a><text><string>BLACKLISTED_BY</string></text></a></t></children></relfraco><llabelUm id="1c0"><points><p colinear="true" x="1247.72802734375" y="-206" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1248.990234375" y="-231" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1c1"><Owner><relfraco ref="1bd"/></Owner></rConnector></startConnector><endConnector><rConnector id="1c2"><Owner><ent ref="7e"/></Owner></rConnector></endConnector></llabelUm><relfraco id="1c3"><children><diamond id="1c4" x="1213" y="-1" w="97" h="50"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="1c5" x="1226.9326171875" y="17.015625"><a><text><string>REFERS_TO</string></text></a></t></children></relfraco><llabelUm id="1c6"><points><p colinear="true" x="1274.4273504273503" y="49" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1311.6581196581196" y="121" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1c7"><Owner><relfraco ref="1c3"/></Owner></rConnector></startConnector><endConnector><rConnector id="1c8"><Owner><ent ref="1e"/></Owner></rConnector></endConnector></llabelUm><relfraco id="1c9"><children><diamond id="1ca" x="820" y="-175" w="155" h="57"><a><fillColor><color rgba="#ffddddff"/></fillColor><strokeType><enum type="strokeType">DOUBLE</enum></strokeType><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></diamond><t id="1cb" x="836.2958984375" y="-153.484375"><a><text><string>BLACKLISTED_FROM</string></text></a></t></children></relfraco><llabelDoubleMuitos id="1cc"><points><p colinear="true" x="1250.2724802753712" y="-156" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1258.799398592203" y="-100" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1cd"><Owner><relfraco ref="1bd"/></Owner></rConnector></startConnector><endConnector><rConnector id="1ce"><Owner><entfraca ref="1ba"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><atrchaveparcial id="1cf" nullable="false" attributeType="NUMBER"><children><e id="1d0" x="1033" y="-166" w="82" h="27"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="1d1" x="1043.3848037719727" y="-160.67205715179443"><a><strokeDashes><doubleArray><double>3</double></doubleArray></strokeDashes><fontBold><boolean>true</boolean></fontBold><text><string>Start_date</string></text></a></t></children></atrchaveparcial><atr id="1d2" nullable="false" attributeType="VARCHAR2(128)"><children><e id="1d3" x="1143" y="-154" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="1d4" x="1156.9958267211914" y="-152.17205715179443"><a><text><string>End_date</string></text></a></t></children></atr><lcaf id="1d5"><points><p colinear="true" x="1108.9779835668103" y="-139" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1210.025491648707" y="-100" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1d6"><Owner><atrchaveparcial ref="1cf"/></Owner></rConnector></startConnector><endConnector><rConnector id="1d7"><Owner><entfraca ref="1ba"/></Owner></rConnector></endConnector></lcaf><lcaf id="1d8"><points><p colinear="true" x="1195.3194885253906" y="-134" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1237.2057495117188" y="-100" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1d9"><Owner><atr ref="1d2"/></Owner></rConnector></startConnector><endConnector><rConnector id="1da"><Owner><entfraca ref="1ba"/></Owner></rConnector></endConnector></lcaf><lcaf id="1db"><points><p colinear="true" x="1113" y="-69.02727922160629" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1192" y="-74.85109953094802" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1dc"><Owner><atr ref="172"/></Owner></rConnector></startConnector><endConnector><rConnector id="1dd"><Owner><entfraca ref="1ba"/></Owner></rConnector></endConnector></lcaf><llabelDoubleMuitos id="1de"><points><p colinear="true" x="1261.5828669621394" y="-1" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1261.7784329927886" y="-60" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1df"><Owner><relfraco ref="1c3"/></Owner></rConnector></startConnector><endConnector><rConnector id="1e0"><Owner><entfraca ref="1ba"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelUm id="1e1"><points><p colinear="true" x="820" y="-132.29329962073325" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="502" y="-75"/><p colinear="true" x="344.47863247863245" y="23" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1e2"><Owner><relfraco ref="1c9"/></Owner></rConnector></startConnector><endConnector><rConnector id="1e3"><Owner><ent ref="21"/></Owner></rConnector></endConnector></llabelUm><llabelDoubleMuitos id="1e4"><points><p colinear="true" x="975" y="-132.3547424341109" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1192" y="-92.7480212496214" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1e5"><Owner><relfraco ref="1c9"/></Owner></rConnector></startConnector><endConnector><rConnector id="1e6"><Owner><entfraca ref="1ba"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor><text><string>N</string></text></a></llabelDoubleMuitos><llabelMuitos id="1e7"><points><p colinear="true" x="1020.8797620589357" y="623" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1379" y="463.78357221078545" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1e8"><Owner><rel ref="bd"/></Owner></rConnector></startConnector><endConnector><rConnector id="1e9"><Owner><ent ref="39"/></Owner></rConnector></endConnector><a><text><string>Q</string></text></a></llabelMuitos><atrchave id="1ea" nullable="false" attributeType="NUMBER"><children><e id="1eb" x="1296" y="195" w="80" h="20"><a><fillColor><color rgba="#ffffebeb"/></fillColor></a></e><t id="1ec" x="1329.9009628295898" y="196.82794284820557"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>Id</string></text></a></t></children></atrchave><lcaf id="1ed"><points><p colinear="true" x="1326.375" y="161" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1333.8125" y="195" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="1ee"><Owner><ent ref="1e"/></Owner></rConnector></startConnector><endConnector><rConnector id="1ef"><Owner><atrchave ref="1ea"/></Owner></rConnector></endConnector></lcaf></figures></drawing>
Index: mvnw
===================================================================
--- mvnw	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ mvnw	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,259 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Apache Maven Wrapper startup batch script, version 3.3.2
+#
+# Optional ENV vars
+# -----------------
+#   JAVA_HOME - location of a JDK home dir, required when download maven via java source
+#   MVNW_REPOURL - repo url base for downloading maven distribution
+#   MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+#   MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
+# ----------------------------------------------------------------------------
+
+set -euf
+[ "${MVNW_VERBOSE-}" != debug ] || set -x
+
+# OS specific support.
+native_path() { printf %s\\n "$1"; }
+case "$(uname)" in
+CYGWIN* | MINGW*)
+  [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
+  native_path() { cygpath --path --windows "$1"; }
+  ;;
+esac
+
+# set JAVACMD and JAVACCMD
+set_java_home() {
+  # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
+  if [ -n "${JAVA_HOME-}" ]; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ]; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+      JAVACCMD="$JAVA_HOME/jre/sh/javac"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+      JAVACCMD="$JAVA_HOME/bin/javac"
+
+      if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
+        echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
+        echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
+        return 1
+      fi
+    fi
+  else
+    JAVACMD="$(
+      'set' +e
+      'unset' -f command 2>/dev/null
+      'command' -v java
+    )" || :
+    JAVACCMD="$(
+      'set' +e
+      'unset' -f command 2>/dev/null
+      'command' -v javac
+    )" || :
+
+    if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
+      echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
+      return 1
+    fi
+  fi
+}
+
+# hash string like Java String::hashCode
+hash_string() {
+  str="${1:-}" h=0
+  while [ -n "$str" ]; do
+    char="${str%"${str#?}"}"
+    h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
+    str="${str#?}"
+  done
+  printf %x\\n $h
+}
+
+verbose() { :; }
+[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
+
+die() {
+  printf %s\\n "$1" >&2
+  exit 1
+}
+
+trim() {
+  # MWRAPPER-139:
+  #   Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
+  #   Needed for removing poorly interpreted newline sequences when running in more
+  #   exotic environments such as mingw bash on Windows.
+  printf "%s" "${1}" | tr -d '[:space:]'
+}
+
+# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
+while IFS="=" read -r key value; do
+  case "${key-}" in
+  distributionUrl) distributionUrl=$(trim "${value-}") ;;
+  distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
+  esac
+done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
+[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
+
+case "${distributionUrl##*/}" in
+maven-mvnd-*bin.*)
+  MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
+  case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
+  *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
+  :Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
+  :Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
+  :Linux*x86_64*) distributionPlatform=linux-amd64 ;;
+  *)
+    echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
+    distributionPlatform=linux-amd64
+    ;;
+  esac
+  distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
+  ;;
+maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
+*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
+esac
+
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
+[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
+distributionUrlName="${distributionUrl##*/}"
+distributionUrlNameMain="${distributionUrlName%.*}"
+distributionUrlNameMain="${distributionUrlNameMain%-bin}"
+MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
+MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
+
+exec_maven() {
+  unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
+  exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
+}
+
+if [ -d "$MAVEN_HOME" ]; then
+  verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+  exec_maven "$@"
+fi
+
+case "${distributionUrl-}" in
+*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
+*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
+esac
+
+# prepare tmp dir
+if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
+  clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
+  trap clean HUP INT TERM EXIT
+else
+  die "cannot create temp dir"
+fi
+
+mkdir -p -- "${MAVEN_HOME%/*}"
+
+# Download and Install Apache Maven
+verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
+verbose "Downloading from: $distributionUrl"
+verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
+
+# select .zip or .tar.gz
+if ! command -v unzip >/dev/null; then
+  distributionUrl="${distributionUrl%.zip}.tar.gz"
+  distributionUrlName="${distributionUrl##*/}"
+fi
+
+# verbose opt
+__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
+[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
+
+# normalize http auth
+case "${MVNW_PASSWORD:+has-password}" in
+'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+esac
+
+if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
+  verbose "Found wget ... using wget"
+  wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
+elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
+  verbose "Found curl ... using curl"
+  curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
+elif set_java_home; then
+  verbose "Falling back to use Java to download"
+  javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
+  targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
+  cat >"$javaSource" <<-END
+	public class Downloader extends java.net.Authenticator
+	{
+	  protected java.net.PasswordAuthentication getPasswordAuthentication()
+	  {
+	    return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
+	  }
+	  public static void main( String[] args ) throws Exception
+	  {
+	    setDefault( new Downloader() );
+	    java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
+	  }
+	}
+	END
+  # For Cygwin/MinGW, switch paths to Windows format before running javac and java
+  verbose " - Compiling Downloader.java ..."
+  "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
+  verbose " - Running Downloader.java ..."
+  "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
+fi
+
+# If specified, validate the SHA-256 sum of the Maven distribution zip file
+if [ -n "${distributionSha256Sum-}" ]; then
+  distributionSha256Result=false
+  if [ "$MVN_CMD" = mvnd.sh ]; then
+    echo "Checksum validation is not supported for maven-mvnd." >&2
+    echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+    exit 1
+  elif command -v sha256sum >/dev/null; then
+    if echo "$distributionSha256Sum  $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
+      distributionSha256Result=true
+    fi
+  elif command -v shasum >/dev/null; then
+    if echo "$distributionSha256Sum  $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
+      distributionSha256Result=true
+    fi
+  else
+    echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
+    echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+    exit 1
+  fi
+  if [ $distributionSha256Result = false ]; then
+    echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
+    echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
+    exit 1
+  fi
+fi
+
+# unzip and move
+if command -v unzip >/dev/null; then
+  unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
+else
+  tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
+fi
+printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
+mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
+
+clean || :
+exec_maven "$@"
Index: pom.xml
===================================================================
--- pom.xml	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ pom.xml	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>3.4.1</version>
+        <relativePath/>
+    </parent>
+    <groupId>com.db.finki.www</groupId>
+    <artifactId>build_board</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <properties>
+        <java.version>17</java.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.security</groupId>-->
+<!--            <artifactId>spring-security-core</artifactId>-->
+<!--            <version>6.4.1</version>-->
+<!--        </dependency>-->
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <scope>runtime</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.flywaydb</groupId>
+            <artifactId>flyway-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.flywaydb</groupId>
+            <artifactId>flyway-database-postgresql</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <version>42.7.4</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
Index: src/main/java/com/db/finki/www/build_board/DemoApplication.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/DemoApplication.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/java/com/db/finki/www/build_board/DemoApplication.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,21 @@
+package com.db.finki.www.build_board;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+@SpringBootApplication
+public class DemoApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(DemoApplication.class, args);
+	}
+
+	@Bean
+	PasswordEncoder passwordEncoder() {
+		return new BCryptPasswordEncoder(12);
+	}
+
+}
Index: src/main/java/com/db/finki/www/build_board/config/BeanConfig.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/config/BeanConfig.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/java/com/db/finki/www/build_board/config/BeanConfig.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,14 @@
+package com.db.finki.www.build_board.config;
+
+import com.db.finki.www.build_board.service.AuthenticationSuccessHandlerImpl;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
+
+@Configuration
+public class BeanConfig {
+    @Bean
+    public AuthenticationSuccessHandler authenticationSuccessHandler() {
+        return new AuthenticationSuccessHandlerImpl();
+    }
+}
Index: src/main/java/com/db/finki/www/build_board/config/WebSecurityConfig.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/config/WebSecurityConfig.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/java/com/db/finki/www/build_board/config/WebSecurityConfig.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,72 @@
+package com.db.finki.www.build_board.config;
+
+import com.db.finki.www.build_board.entity.BBUser;
+import com.db.finki.www.build_board.service.AuthenticationSuccessHandlerImpl;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.AuthenticationProvider;
+import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
+import org.springframework.security.config.Customizer;
+import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.web.SecurityFilterChain;
+import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
+
+import java.io.IOException;
+
+@Configuration
+@EnableWebSecurity
+public class WebSecurityConfig {
+
+    private final PasswordEncoder passwordEncoder;
+    private final UserDetailsService userDetailsService;
+    private final AuthenticationSuccessHandler successHandler;
+
+
+    public WebSecurityConfig(PasswordEncoder passwordEncoder, UserDetailsService userDetailsService, AuthenticationSuccessHandler successHandler) {
+        this.passwordEncoder = passwordEncoder;
+        this.userDetailsService = userDetailsService;
+        this.successHandler = successHandler;
+    }
+
+    @Bean
+    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
+        http
+                .csrf(AbstractHttpConfigurer::disable)
+                .authorizeHttpRequests(request ->
+                        request
+                                .anyRequest().authenticated()
+                ).formLogin(formLogin ->
+                        formLogin.permitAll()
+                                .defaultSuccessUrl("/")
+                                .successHandler(successHandler)
+                        );
+
+        return http.build();
+
+    }
+
+    @Bean
+    public AuthenticationProvider authenticationProvider() {
+        DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
+        daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);
+        daoAuthenticationProvider.setUserDetailsService(userDetailsService);
+        return daoAuthenticationProvider;
+    }
+
+    @Bean
+    public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception {
+        return config.getAuthenticationManager();
+    }
+}
Index: src/main/java/com/db/finki/www/build_board/controller/HomePageController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/HomePageController.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/java/com/db/finki/www/build_board/controller/HomePageController.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,14 @@
+package com.db.finki.www.build_board.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+@RequestMapping("/")
+public class HomePageController {
+    @GetMapping
+    public String homePage() {
+        return "home";
+    }
+}
Index: src/main/java/com/db/finki/www/build_board/controller/LoginPageController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/LoginPageController.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/java/com/db/finki/www/build_board/controller/LoginPageController.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,20 @@
+package com.db.finki.www.build_board.controller;
+
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@Controller
+public class LoginPageController {
+    @GetMapping("/login")
+    public String getLoginPage() {
+        return "login";
+    }
+    @PostMapping("/login")
+    public String login(@RequestParam String username, @RequestParam String password, Model model, HttpServletRequest request) {
+        return "redirect:/";
+    }
+}
Index: src/main/java/com/db/finki/www/build_board/entity/BBUser.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/BBUser.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/java/com/db/finki/www/build_board/entity/BBUser.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,48 @@
+package com.db.finki.www.build_board.entity;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.List;
+@Entity
+@Table(name = "users")
+@Getter @Setter
+public class BBUser implements UserDetails, Serializable {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private int id;
+    private String username;
+    private String password;
+    private String description;
+    @Column(name = "registered_at")
+    private LocalDateTime registeredAt;
+    @Column(name = "is_activate")
+    private boolean isEnabled;
+    private String sex;
+
+    @Override
+    public boolean isEnabled() {
+        return isEnabled;
+    }
+
+    @Override
+    public String getUsername() {
+        return username;
+    }
+    @Override
+    public String getPassword() {
+        return password;
+    }
+    @Override
+    public Collection<? extends GrantedAuthority> getAuthorities() {
+        return List.of();
+    }
+
+}
Index: src/main/java/com/db/finki/www/build_board/repository/UserRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/UserRepository.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/java/com/db/finki/www/build_board/repository/UserRepository.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,12 @@
+package com.db.finki.www.build_board.repository;
+
+import com.db.finki.www.build_board.entity.BBUser;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface UserRepository extends JpaRepository<BBUser, Long> {
+    Optional<BBUser> findByUsername(String username);
+}
Index: src/main/java/com/db/finki/www/build_board/service/AuthenticationSuccessHandlerImpl.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/AuthenticationSuccessHandlerImpl.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/java/com/db/finki/www/build_board/service/AuthenticationSuccessHandlerImpl.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,25 @@
+package com.db.finki.www.build_board.service;
+
+import com.db.finki.www.build_board.entity.BBUser;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
+import org.springframework.context.annotation.Primary;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+public class AuthenticationSuccessHandlerImpl implements AuthenticationSuccessHandler {
+    @Override
+    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
+        BBUser user = (BBUser) authentication.getPrincipal();
+        HttpSession session = request.getSession();
+        session.setAttribute("user", user);
+        session.setMaxInactiveInterval(1800);
+        response.sendRedirect("/");
+    }
+
+}
Index: src/main/java/com/db/finki/www/build_board/service/BBUserDetailsService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/BBUserDetailsService.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/java/com/db/finki/www/build_board/service/BBUserDetailsService.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,21 @@
+package com.db.finki.www.build_board.service;
+
+import com.db.finki.www.build_board.repository.UserRepository;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BBUserDetailsService implements UserDetailsService {
+    private final UserRepository userRepository;
+
+    public BBUserDetailsService(UserRepository userRepository) {
+        this.userRepository = userRepository;
+    }
+
+    @Override
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+        return userRepository.findByUsername(username).orElseThrow(() -> new UsernameNotFoundException("User not found with username: " + username));
+    }
+}
Index: src/main/java/com/db/finki/www/build_board/service/UserService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/UserService.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/java/com/db/finki/www/build_board/service/UserService.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,7 @@
+package com.db.finki.www.build_board.service;
+
+import com.db.finki.www.build_board.entity.BBUser;
+
+public interface UserService {
+    BBUser verifyCredentials(String username, String password);
+}
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/resources/application.properties	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,8 @@
+spring.application.name=build_board
+
+spring.datasource.username=${POSTGRES_USER}
+spring.datasource.password=${POSTGRES_PASSWORD}
+spring.datasource.url=jdbc:postgresql://localhost:5432/${POSTGRES_DB}
+
+spring.flyway.password=${POSTGRES_PASSWORD}
+spring.flyway.user=${POSTGRES_USER}
Index: src/main/resources/db/migration/V1__init_ddl.sql
===================================================================
--- src/main/resources/db/migration/V1__init_ddl.sql	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/resources/db/migration/V1__init_ddl.sql	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,151 @@
+create table users(
+	username varchar(32) primary key, 
+	is_activate bool, 
+	password varchar(72), 
+	description varchar(200), 
+	registered_at timestamp,
+	sex varchar(1)
+); 
+
+create table moderator() inherits (users);
+create table developer() inherits (users); 
+create table project_manager() inherits (users); 
+
+create table thread (
+	id serial primary key,
+	description text,
+	logo_url text,
+	title varchar(32),
+	username varchar(32) references users(username)
+);
+
+create table likes(
+	username varchar(32) references users(username), 
+	thread_id int references thread(id),
+	primary key(username, thread_id)
+); 
+
+create table threads_moderators(
+	thread_id int references thread(id) on delete cascade,
+	username varchar(32) references users(username) on delete cascade,
+	primary key(thread_id, username)
+);
+
+create table tag(
+	name varchar(64) primary key
+);
+
+create table tag_threads(
+	thread_id int references thread(id),
+	tag_name varchar(64) references tag(name),
+	primary key(thread_id, tag_name)
+);
+
+create table topic_thread (
+	guidelines jsonb,
+	next_discussion_id int
+) inherits (thread);
+
+create table topic_belongs_to_project(
+	topic_id int references thread(id) on delete cascade,
+	project_id int references thread(id) on delete cascade,
+	primary key(topic_id,project_id)
+);
+
+create table topic_blacklist(
+	username varchar(32) references users(username) on delete cascade,
+	project_id varchar(32) references users(username) on delete cascade,
+	primary key(username,project_id)
+);
+
+create table project_thread (
+	repo_url text
+) inherits (thread);
+
+create table discussion_thread(
+	text text,
+	id int,
+	topic_id int not null references thread(id),
+	created_by_user varchar(32) not null references users(username),
+	reply_discussion int,
+	reply_topic_id int,
+	primary key(topic_id, id),
+	check ((reply_discussion is null) and (topic_id = reply_topic_id))
+);
+
+create table developer_associated_with_project(
+	project_id int references thread(id),
+	developer varchar(32) references users(username),
+	started_at timestamp,
+	ended_at timestamp,
+	primary key(project_id, developer, started_at)
+);
+
+create table permissions(
+	name varchar(32) primary key
+); 
+
+create table project_roles(
+	name varchar(32),
+	project_id int references thread(id) on delete cascade,
+	description text not null,
+	primary key(name, project_id)
+);
+
+create table users_project_roles(
+	username varchar(32) references users(username),
+	project_id int, 
+	role_name varchar(32),
+	FOREIGN KEY (role_name, project_id)
+    REFERENCES project_roles(name, project_id),
+    primary key(username, project_id, role_name)
+);
+
+create table project_roles_permissions(
+	permission_name varchar(32) references permissions(name),
+	role_name varchar(32),
+	project_id int,
+	primary key(permission_name, role_name, project_id),
+	FOREIGN KEY (role_name, project_id)
+    REFERENCES project_roles(name, project_id)
+);
+
+CREATE TYPE status AS ENUM ('ACCEPTED', 'DENIED', 'PENDING');
+
+create table project_request(
+	id serial primary key,
+	reason varchar (200),
+	status status,
+	submited_by_user varchar(32) references users(username) not null,
+	for_project int references thread(id) not null	
+); 
+
+create table report(
+	id serial primary key,
+	created_at timestamp,
+	description varchar(200),
+	status status,
+	thread_id int references thread(id) not null,
+	for_user varchar(32) references users(username) not null,
+	by_user varchar(32) references users(username) not null
+);
+
+create table channel (
+	name varchar (64),
+	description varchar(200),
+	logo_url text,
+	project_id int references thread(id) on delete cascade,
+	developer varchar(32) references users(username),
+	primary key(name, project_id)
+);
+
+create table messages (
+	sent_at timestamp,
+	content varchar(200),
+	sent_by varchar(32) references users(username) not null,
+	project_id int,
+	channel_name varchar(64),
+	FOREIGN KEY (channel_name, project_id)
+    REFERENCES channel(name, project_id) on delete cascade,
+    primary key(channel_name, project_id, sent_at, sent_by)
+);
Index: src/main/resources/db/migration/V2__init_ddl-corrected.sql
===================================================================
--- src/main/resources/db/migration/V2__init_ddl-corrected.sql	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/resources/db/migration/V2__init_ddl-corrected.sql	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,264 @@
+--- Trigger before update/insert za check na iminjata topic/discussion -> OK
+--- Trigger za ko ke adnit dete na topic thread sho e vo proekt, da go dodajt kako belongs_to vo proektot
+--- Trigger za check dali reply na discussion thread pripagjat na ist topic thread kako na toj so mu pret reply
+
+
+--- IMENUVANJE: triggeri so provervat nesto prefix = check, funkcii za istite prefix = validate\
+
+
+
+-- DROP TABLES
+DROP TABLE IF EXISTS users CASCADE;
+DROP TABLE IF EXISTS moderator CASCADE;
+DROP TABLE IF EXISTS developer CASCADE;
+DROP TABLE IF EXISTS project_manager CASCADE;
+DROP TABLE IF EXISTS thread CASCADE;
+DROP TABLE IF EXISTS likes CASCADE;
+DROP TABLE IF EXISTS topic_threads_moderators CASCADE;
+DROP TABLE IF EXISTS tag CASCADE;
+DROP TABLE IF EXISTS tag_threads CASCADE;
+DROP TABLE IF EXISTS topic_thread CASCADE;
+DROP TABLE IF EXISTS topic_belongs_to_project CASCADE;
+DROP TABLE IF EXISTS topic_blacklist CASCADE;
+DROP TABLE IF EXISTS project_thread CASCADE;
+DROP TABLE IF EXISTS discussion_thread CASCADE;
+DROP TABLE IF EXISTS developer_associated_with_project CASCADE;
+DROP TABLE IF EXISTS permissions CASCADE;
+DROP TABLE IF EXISTS project_roles CASCADE;
+DROP TABLE IF EXISTS users_project_roles CASCADE;
+DROP TABLE IF EXISTS project_roles_permissions CASCADE;
+DROP TABLE IF EXISTS project_request CASCADE;
+DROP TABLE IF EXISTS report CASCADE;
+DROP TABLE IF EXISTS channel CASCADE;
+DROP TABLE IF EXISTS messages CASCADE;
+DROP TABLE IF EXISTS threads_moderators CASCADE;
+drop type if exists status;
+drop function if exists add_child_topic;
+drop function if exists validate_same_parent;
+drop function if exists validate_topic_title;
+
+
+---- DDL
+
+create table users(
+                      username varchar(32) primary key,
+                      is_activate bool,
+                      password varchar(72),
+                      description varchar(200),
+                      registered_at timestamp,
+                      sex varchar(1)
+);
+
+create table moderator() inherits (users);
+create table developer() inherits (users);
+create table project_manager() inherits (users);
+
+create table thread (
+                        id serial primary key,
+                        content text,
+                        username varchar(32) references users(username)
+);
+
+create table likes(
+                      username varchar(32) references users(username),
+                      thread_id int references thread(id),
+                      primary key(username, thread_id)
+);
+
+create table topic_threads_moderators(
+                                         thread_id int references thread(id) on delete cascade,
+                                         username varchar(32) references users(username) on delete cascade,
+                                         primary key(thread_id, username)
+);
+
+create table tag(
+                    name varchar(64) primary key
+);
+
+create table tag_threads(
+                            thread_id int references thread(id),
+                            tag_name varchar(64) references tag(name),
+                            primary key(thread_id, tag_name)
+);
+
+create table topic_thread (
+                              title varchar(32),
+                              guidelines jsonb,
+                              next_discussion_id int,
+                              parent_topic_id int REFERENCES thread(id)
+) inherits (thread);
+
+create table topic_belongs_to_project(
+                                         topic_id int references thread(id) on delete cascade,
+                                         project_id int references thread(id) on delete cascade,
+                                         primary key(topic_id,project_id)
+);
+
+create table topic_blacklist(
+                                topic_id int REFERENCES thread(id) ON DELETE CASCADE,
+                                username varchar(32) references users(username) on delete cascade,
+                                moderator varchar(32) references users(username) on delete cascade,
+                                primary key(username,moderator,topic_id)
+);
+
+create table project_thread (
+                                title varchar(32),
+                                repo_url text
+) inherits (thread);
+
+create table discussion_thread(
+                                  created_by_user varchar(32) not null references users(username),
+                                  reply_discussion_id int REFERENCES thread(id),
+                                  topic_id int REFERENCES thread(id)
+) inherits(thread);
+
+create table developer_associated_with_project(
+                                                  project_id int references thread(id),
+                                                  developer varchar(32) references users(username),
+                                                  started_at timestamp,
+                                                  ended_at timestamp,
+                                                  primary key(project_id, developer, started_at)
+);
+
+create table permissions(
+                            name varchar(32) primary key
+);
+
+create table project_roles(
+                              name varchar(32),
+                              project_id int references thread(id) on delete cascade,
+                              description text not null,
+                              primary key(name, project_id)
+);
+
+create table users_project_roles(
+                                    username varchar(32) references users(username),
+                                    project_id int,
+                                    role_name varchar(32),
+                                    FOREIGN KEY (role_name, project_id)
+                                        REFERENCES project_roles(name, project_id),
+                                    primary key(username, project_id, role_name)
+);
+
+create table project_roles_permissions(
+                                          permission_name varchar(32) references permissions(name),
+                                          role_name varchar(32),
+                                          project_id int,
+                                          primary key(permission_name, role_name, project_id),
+                                          FOREIGN KEY (role_name, project_id)
+                                              REFERENCES project_roles(name, project_id)
+);
+
+CREATE TYPE status AS ENUM ('ACCEPTED', 'DENIED', 'PENDING');
+
+create table project_request(
+                                id serial primary key,
+                                description varchar (200),
+                                status status,
+                                submited_by_user varchar(32) references users(username) not null,
+                                project_id int references thread(id) not null
+);
+
+create table report(
+                       id serial primary key,
+                       created_at timestamp,
+                       description varchar(200),
+                       status status,
+                       thread_id int references thread(id) not null,
+                       for_user varchar(32) references users(username) not null,
+                       by_user varchar(32) references users(username) not null
+);
+
+create table channel (
+                         name varchar (64),
+                         description varchar(200),
+                         logo_url text,
+                         project_id int references thread(id) on delete cascade,
+                         developer varchar(32) references users(username),
+                         primary key(name, project_id)
+);
+
+create table messages (
+                          sent_at timestamp,
+                          content varchar(200),
+                          sent_by varchar(32) references users(username) not null,
+                          project_id int,
+                          channel_name varchar(64),
+                          FOREIGN KEY (channel_name, project_id)
+                              REFERENCES channel(name, project_id) on delete cascade,
+                          primary key(channel_name, project_id, sent_at, sent_by)
+);
+
+
+-------------------------- FUNCTIONS ----------------------
+
+CREATE FUNCTION validate_topic_title()
+    RETURNS trigger
+    LANGUAGE plpgsql
+as $$
+BEGIN
+		IF NEW.title IN
+			(
+			SELECT title
+			FROM topic_thread
+			AS t
+			WHERE t.parent_topic_id = NEW.parent_topic_id)
+			THEN RAISE EXCEPTION 'There already exists a topic with title % in parent topic with id %',NEW.title,NEW.parent_topic_id;
+END IF;
+RETURN NEW;
+END;
+$$;
+
+CREATE FUNCTION add_child_topic()
+    RETURNS TRIGGER
+    LANGUAGE plpgsql
+AS $$
+DECLARE
+project_id INT;
+BEGIN
+SELECT t.project_id
+INTO project_id
+FROM topic_belongs_to_project AS t WHERE NEW.id = t.topic_id;
+INSERT INTO topic_belongs_to_project VALUES (NEW.id,project_id);
+END;
+$$;
+
+CREATE FUNCTION validate_same_parent()
+    RETURNS TRIGGER
+    LANGUAGE plpgsql
+AS $$
+BEGIN
+		IF NOT EXISTS (
+			SELECT 1
+			FROM discussion_thread
+			AS dt
+			WHERE NEW.reply_discussion_id = dt.id AND dt.topic_id = NEW.topic_id
+		) THEN
+		RAISE EXCEPTION 'Can not reply to a discussion that is not in the same topic';
+END IF;
+RETURN NEW;
+END;
+$$;
+
+
+-------------------------- TRIGGERS ----------------------
+
+CREATE or replace TRIGGER check_topic_name
+	BEFORE INSERT OR UPDATE ON topic_thread
+                                FOR EACH ROW
+                                EXECUTE FUNCTION validate_topic_title();
+
+CREATE OR REPLACE TRIGGER project_insert_child_topic
+AFTER INSERT ON topic_thread
+FOR EACH ROW
+EXECUTE FUNCTION add_child_topic();
+
+CREATE OR REPLACE TRIGGER check_same_parent
+BEFORE INSERT ON discussion_thread
+FOR EACH ROW
+EXECUTE FUNCTION validate_same_parent();
+
+
+
+
+
Index: src/main/resources/db/migration/V3__init_ddl.sql
===================================================================
--- src/main/resources/db/migration/V3__init_ddl.sql	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/resources/db/migration/V3__init_ddl.sql	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,320 @@
+--- Trigger before update/insert za check na iminjata topic/discussion -> OK
+--- Trigger za ko ke adnit dete na topic thread sho e vo proekt, da go dodajt kako belongs_to vo proektot
+--- Trigger za check dali reply na discussion thread pripagjat na ist topic thread kako na toj so mu pret reply
+--- IMENUVANJE: triggeri so provervat nesto prefix = check, funkcii za istite prefix = validate
+--- Nemame contraint sho velit deka sekoj topic thread trebat da e moderiran
+DROP TABLE IF EXISTS users CASCADE;
+DROP TABLE IF EXISTS moderator CASCADE;
+DROP TABLE IF EXISTS developer CASCADE;
+DROP TABLE IF EXISTS project_manager CASCADE;
+DROP TABLE IF EXISTS thread CASCADE;
+DROP TABLE IF EXISTS likes CASCADE;
+DROP TABLE IF EXISTS topic_threads_moderators CASCADE;
+DROP TABLE IF EXISTS tag CASCADE;
+DROP TABLE IF EXISTS tag_threads CASCADE;
+DROP TABLE IF EXISTS topic_thread CASCADE;
+DROP TABLE IF EXISTS topic_belongs_to_project CASCADE;
+DROP TABLE IF EXISTS blacklisted_user CASCADE;
+DROP TABLE IF EXISTS project_thread CASCADE;
+DROP TABLE IF EXISTS discussion_thread CASCADE;
+DROP TABLE IF EXISTS developer_associated_with_project CASCADE;
+DROP TABLE IF EXISTS permissions CASCADE;
+DROP TABLE IF EXISTS project_roles CASCADE;
+DROP TABLE IF EXISTS users_project_roles CASCADE;
+DROP TABLE IF EXISTS project_roles_permissions CASCADE;
+DROP TABLE IF EXISTS project_request CASCADE;
+DROP TABLE IF EXISTS report CASCADE;
+DROP TABLE IF EXISTS channel CASCADE;
+DROP TABLE IF EXISTS messages CASCADE;
+DROP TABLE IF EXISTS threads_moderators CASCADE;
+DROP TYPE IF EXISTS status;
+DROP VIEW IF EXISTS v_topic_thread CASCADE;
+DROP VIEW IF EXISTS v_project_thread CASCADE;
+DROP VIEW IF EXISTS v_discussion_thread CASCADE;
+DROP VIEW IF EXISTS v_developer CASCADE;
+DROP VIEW IF EXISTS v_project_owner CASCADE;
+DROP VIEW IF EXISTS v_moderator CASCADE;
+drop function if exists fn_insert_project_manager CASCADE;
+drop function if exists fn_insert_topics_creator_as_moderator CASCADE;
+drop function if exists fn_validate_topic_title CASCADE;
+drop function if exists clean_tables CASCADE;
+drop function if exists clean_routines CASCADE;
+DROP TRIGGER IF EXISTS validate_same_parent ON discussion_thread CASCADE;
+---- DDL
+CREATE TABLE users
+(
+    id            SERIAL PRIMARY KEY,
+    username      VARCHAR(32) UNIQUE NOT NULL,
+    is_activate   bool,
+    password      VARCHAR(72),
+    description   VARCHAR(200),
+    registered_at TIMESTAMP,
+    sex           VARCHAR(1)
+);
+CREATE TABLE moderator
+(
+    id INT PRIMARY KEY REFERENCES users (id)  on delete cascade
+);
+CREATE TABLE developer
+(
+    id INT PRIMARY KEY REFERENCES users (id)  on delete cascade
+);
+CREATE TABLE project_manager
+(
+    id INT PRIMARY KEY REFERENCES users (id)  on delete cascade
+);
+CREATE TABLE thread
+(
+    id      SERIAL PRIMARY KEY,
+    content TEXT,
+    user_id INT REFERENCES users (id) NOT NULL
+);
+CREATE TABLE topic_thread
+(
+    title           VARCHAR(32) NOT NULL,
+    guidelines      jsonb,
+    parent_id INT REFERENCES thread (id),
+    id              INT PRIMARY KEY REFERENCES thread (id) on delete cascade
+);
+CREATE TABLE discussion_thread
+(
+    parent_id           INT REFERENCES thread (id) NOT NULL,
+    id                  INT PRIMARY KEY REFERENCES thread (id) on delete cascade
+);
+CREATE TABLE project_thread
+(
+    title    VARCHAR(32) NOT NULL,
+    repo_url TEXT,
+    id       INT PRIMARY KEY REFERENCES thread (id) on delete cascade
+);
+CREATE TABLE likes
+(
+    user_id   INT REFERENCES users (id),
+    thread_id INT REFERENCES thread (id),
+    PRIMARY KEY (user_id, thread_id)
+);
+CREATE TABLE topic_threads_moderators
+(
+    thread_id INT REFERENCES thread (id) ON DELETE CASCADE,
+    user_id   INT REFERENCES users (id) ON DELETE CASCADE,
+    PRIMARY KEY (thread_id, user_id)
+);
+CREATE TABLE tag
+(
+    name VARCHAR(64) PRIMARY KEY
+);
+CREATE TABLE tag_threads
+(
+    thread_id INT REFERENCES thread (id),
+    tag_name  VARCHAR(64) REFERENCES tag (name),
+    PRIMARY KEY (thread_id, tag_name)
+);
+
+CREATE TABLE topic_belongs_to_project
+(
+    topic_id   INT REFERENCES thread (id) ON DELETE CASCADE,
+    project_id INT REFERENCES thread (id) ON DELETE CASCADE,
+    PRIMARY KEY (topic_id, project_id)
+);
+CREATE TABLE blacklisted_user
+(
+    topic_id     INT REFERENCES thread (id) ON DELETE CASCADE,
+    user_id      INT REFERENCES users (id) ON DELETE CASCADE,
+    moderator_id INT REFERENCES users (id) ON DELETE CASCADE,
+    start_date   TIMESTAMP,
+    end_date     TIMESTAMP,
+    reason       TEXT,
+    PRIMARY KEY (user_id, moderator_id, topic_id, start_date)
+);
+
+CREATE TABLE developer_associated_with_project
+(
+    project_id   INT REFERENCES thread (id),
+    developer_id INT REFERENCES users (id),
+    started_at   TIMESTAMP,
+    ended_at     TIMESTAMP,
+    PRIMARY KEY (project_id, developer_id, started_at)
+);
+CREATE TABLE permissions
+(
+    name VARCHAR(32) PRIMARY KEY
+);
+CREATE TABLE project_roles
+(
+    name        VARCHAR(32),
+    project_id  INT REFERENCES thread (id) ON DELETE CASCADE,
+    description TEXT,
+    PRIMARY KEY (name, project_id)
+);
+CREATE TABLE users_project_roles
+(
+    user_id    INT REFERENCES users (id),
+    project_id INT,
+    role_name  VARCHAR(32),
+    FOREIGN KEY (role_name, project_id)
+        REFERENCES project_roles (name, project_id),
+    PRIMARY KEY (user_id, project_id, role_name)
+);
+CREATE TABLE project_roles_permissions
+(
+    permission_name VARCHAR(32) REFERENCES permissions (name),
+    role_name       VARCHAR(32),
+    project_id      INT,
+    PRIMARY KEY (permission_name, role_name, project_id),
+    FOREIGN KEY (role_name, project_id)
+        REFERENCES project_roles (name, project_id)
+);
+CREATE TYPE status AS ENUM ('ACCEPTED', 'DENIED', 'PENDING');
+CREATE TABLE project_request
+(
+    id          SERIAL PRIMARY KEY,
+    description VARCHAR(200),
+    status      status                     NOT NULL,
+    user_id     INT REFERENCES users (id)  NOT NULL,
+    project_id  INT REFERENCES thread (id) NOT NULL
+);
+CREATE TABLE report
+(
+    id          SERIAL,
+    created_at  TIMESTAMP,
+    description VARCHAR(200) NOT NULL,
+    status      status,
+    thread_id   INT REFERENCES thread (id),
+    for_user_id INT REFERENCES users (id),
+    by_user_id  INT REFERENCES users (id),
+    PRIMARY KEY (id, thread_id, for_user_id, by_user_id)
+);
+CREATE TABLE channel
+(
+    name         VARCHAR(64),
+    description  VARCHAR(200),
+    project_id   INT REFERENCES thread (id) ON DELETE CASCADE,
+    developer_id INT REFERENCES users (id),
+    PRIMARY KEY (name, project_id)
+);
+CREATE TABLE messages
+(
+    sent_at      TIMESTAMP,
+    content      VARCHAR(200) NOT NULL,
+    sent_by      INT REFERENCES users (id),
+    project_id   INT,
+    channel_name VARCHAR(64),
+    FOREIGN KEY (channel_name, project_id)
+        REFERENCES channel (name, project_id) ON DELETE CASCADE,
+    PRIMARY KEY (channel_name, project_id, sent_at, sent_by)
+);
+------------------------VIEWS-----------------------------
+CREATE OR REPLACE VIEW v_project_thread
+AS
+SELECT thread.id, content, user_id, title, repo_url
+FROM project_thread project
+         JOIN thread
+              ON project.id = thread.id;
+CREATE OR REPLACE VIEW v_discussion_thread
+AS
+SELECT thread.id, content, user_id,parent_id
+FROM discussion_thread discussion
+         JOIN thread
+              ON discussion.id = thread.id;
+CREATE OR REPLACE VIEW v_topic_thread
+AS
+SELECT thread.id, content, user_id, title, guidelines, parent_id
+FROM topic_thread topic
+         JOIN thread
+              ON topic.id = thread.id;
+CREATE OR REPLACE VIEW v_moderator
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM moderator
+         JOIN users ON moderator.id = users.id;
+
+CREATE OR REPLACE VIEW v_developer
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM developer
+         JOIN users ON developer.id = users.id;
+CREATE OR REPLACE VIEW v_project_owner
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM project_manager
+         JOIN users ON project_manager.id = users.id;
+CREATE OR REPLACE VIEW v_moderator
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM moderator
+         JOIN users ON moderator.id = users.id;
+
+CREATE OR REPLACE VIEW v_developer
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM developer
+         JOIN users ON developer.id = users.id;
+CREATE OR REPLACE VIEW v_project_owner
+AS
+SELECT users.id, username, is_activate, password, description, registered_at, sex
+FROM project_manager
+         JOIN users ON project_manager.id = users.id;
+-------------------------- FUNCTIONS ----------------------
+CREATE OR REPLACE FUNCTION fn_validate_topic_title()
+    RETURNS TRIGGER
+    LANGUAGE plpgsql
+AS
+$$
+BEGIN
+    IF new.title IN
+       (SELECT title
+        FROM topic_thread
+                 AS t
+        WHERE t.parent_id = new.parent_id OR (t.parent_id IS NULL AND new.parent_id IS NULL))
+    THEN
+        RAISE EXCEPTION 'There already exists a topic with title % in parent topic with id %',new.title,new.parent_id;
+END IF;
+RETURN new;
+END;
+$$;
+CREATE OR REPLACE FUNCTION fn_insert_topics_creator_as_moderator()
+    RETURNS TRIGGER
+    LANGUAGE plpgsql
+AS
+$$
+DECLARE
+v_user_id INT;
+BEGIN
+SELECT v_topic_thread.user_id
+INTO v_user_id
+FROM v_topic_thread
+WHERE v_topic_thread.id = new.id;
+INSERT INTO topic_threads_moderators(thread_id, user_id) VALUES (new.id, v_user_id);
+RETURN NEW;
+END;
+$$;
+
+CREATE OR REPLACE FUNCTION fn_insert_project_manager()
+RETURNS TRIGGER
+LANGUAGE plpgsql
+AS
+    $$
+    DECLARE usrId INT;
+BEGIN
+SELECT user_id INTO usrId FROM v_project_thread p WHERE NEW.id = p.id;
+INSERT INTO developer VALUES (usrId);
+INSERT INTO project_manager VALUES (usrId);
+RETURN NEW;
+END;
+    $$;
+-------------------------- TRIGGERS ----------------------
+CREATE OR REPLACE TRIGGER tr_check_topic_name
+    BEFORE INSERT OR UPDATE
+                                ON topic_thread
+                                FOR EACH ROW
+                                EXECUTE FUNCTION fn_validate_topic_title();
+CREATE OR REPLACE TRIGGER tr_insert_topics_creator_as_moderator
+    AFTER INSERT
+    ON topic_thread
+    FOR EACH ROW
+EXECUTE FUNCTION fn_insert_topics_creator_as_moderator();
+CREATE OR REPLACE TRIGGER tr_insert_project_manager
+    AFTER INSERT
+    ON project_thread
+    FOR EACH ROW
+    EXECUTE FUNCTION fn_insert_project_manager();
Index: src/main/resources/templates/home.html
===================================================================
--- src/main/resources/templates/home.html	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/resources/templates/home.html	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Home Page</title>
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
+</head>
+<body>
+
+<nav>
+    Test
+<!--    nezz zosto e null ova i od ko ke sa  najavit-->
+    <div th:if="${session.user != null}">
+        <p th:text="${session.user.getUsername()}">uasdasd</p>
+    </div>
+    <a href="/login">Log in</a>
+
+</nav>
+<section>
+
+</section>
+
+<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
+</body>
+</html>
Index: src/main/resources/templates/login.html
===================================================================
--- src/main/resources/templates/login.html	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/main/resources/templates/login.html	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Login</title>
+    <!-- Bootstrap CSS -->
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
+</head>
+<body class="bg-light">
+
+<div class="container d-flex align-items-center justify-content-center vh-100">
+    <div class="card shadow-lg" style="width: 100%; max-width: 400px;">
+        <div class="card-body">
+            <h4 class="card-title text-center mb-4">Login</h4>
+            <form method="POST" action="/login">
+                <div class="mb-3">
+                    <label for="username" class="form-label">Username</label>
+                    <input type="text" class="form-control" id="username" name="username" placeholder="Enter your username" required>
+                </div>
+                <div class="mb-3">
+                    <label for="password" class="form-label">Password</label>
+                    <input type="password" class="form-control" id="password" name="password" placeholder="Enter your password" required>
+                </div>
+                <button type="submit" class="btn btn-primary w-100">Login</button>
+            </form>
+            <div class="mt-3 text-center">
+                <a href="/register" class="text-decoration-none">Don't have an account? Register</a>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!-- Bootstrap JS and dependencies -->
+<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
+</body>
+</html>
Index: src/test/java/com/db/finki/www/build_board/DemoApplicationTests.java
===================================================================
--- src/test/java/com/db/finki/www/build_board/DemoApplicationTests.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
+++ src/test/java/com/db/finki/www/build_board/DemoApplicationTests.java	(revision d4f4a4b4c1a4295b2db5fae4a059fccde54d1648)
@@ -0,0 +1,13 @@
+package com.db.finki.www.build_board;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class DemoApplicationTests {
+
+	@Test
+	void contextLoads() {
+	}
+
+}
