Mercurial > cgi-bin > hgwebdir.cgi > VMS > 0__Writings > kshalle
changeset 7:e455dad92745
HotPar2012 paper for PStack with VMS -- about to delete stuff
| author | Me@portablequad |
|---|---|
| date | Tue, 31 Jan 2012 18:03:47 -0800 |
| parents | 0ba1c5b0f060 |
| children | bc4dd419ed1a |
| files | 0__Papers/VMS/VMS__Foundation_Paper/HotPar_2012/figures/Portability_stack_combined.pdf 0__Papers/VMS/VMS__Foundation_Paper/HotPar_2012/figures/Portability_stack_combined.svg 0__Papers/VMS/VMS__Foundation_Paper/HotPar_2012/latex/12_Ja_20__HotPar_Abstr_for_PStack.tex |
| diffstat | 3 files changed, 102 insertions(+), 832 deletions(-) [+] |
line diff
1.1 Binary file 0__Papers/VMS/VMS__Foundation_Paper/HotPar_2012/figures/Portability_stack_combined.pdf has changed
2.1 --- a/0__Papers/VMS/VMS__Foundation_Paper/HotPar_2012/figures/Portability_stack_combined.svg Mon Jan 30 15:31:33 2012 -0800 2.2 +++ b/0__Papers/VMS/VMS__Foundation_Paper/HotPar_2012/figures/Portability_stack_combined.svg Tue Jan 31 18:03:47 2012 -0800 2.3 @@ -52,8 +52,8 @@ 2.4 inkscape:pageopacity="0.0" 2.5 inkscape:pageshadow="2" 2.6 inkscape:zoom="2.34" 2.7 - inkscape:cx="400.0492" 2.8 - inkscape:cy="514.54818" 2.9 + inkscape:cx="402.79936" 2.10 + inkscape:cy="581.58338" 2.11 inkscape:document-units="px" 2.12 inkscape:current-layer="layer1" 2.13 showgrid="false" 2.14 @@ -868,265 +868,6 @@ 2.15 id="195" 2.16 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.17 d="m 307.60701,453.72802 0,0 -7.6378,1.64645 4.36445,-4.97556 0,0 0,0 c 0,1.50172 1.33358,2.8406 3.27335,3.32911 z" /> 2.18 - <g 2.19 - id="g11422" 2.20 - transform="translate(380,0)"> 2.21 - <path 2.22 - d="m 279.31077,458.01604 0,4.59561 -0.65466,0 0,-4.59561 -1.47906,0 0,-0.63325 3.73404,0 0,0.63325 -1.60032,0 z" 2.23 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.24 - id="163" 2.25 - inkscape:connector-curvature="0" /> 2.26 - <path 2.27 - d="m 283.31153,459.44539 0,0 0,0 c -0.12123,-0.10858 -0.26671,-0.16284 -0.4122,-0.16284 l 0,0 0,0 c -0.21823,0 -0.4122,0.10858 -0.58193,0.32568 l 0,0 0,0 c -0.14548,0.2352 -0.24247,0.4885 -0.24247,0.81417 l 0,0 0,2.18925 -0.60618,0 0,-3.81761 0.60618,0 0,0.59706 0,0 0,0 c 0.24247,-0.45231 0.55769,-0.66944 1.01839,-0.66944 l 0,0 0,0 c 0.097,0 0.26669,0.0181 0.48493,0.0544 l -0.26672,0.66944 z" 2.28 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.29 - id="164" 2.30 - inkscape:connector-curvature="0" /> 2.31 - <path 2.32 - d="m 285.95446,462.15932 0,0 0,0 c -0.26672,0.34377 -0.63043,0.5247 -1.16387,0.5247 l 0,0 0,0 c -0.24246,0 -0.48493,-0.1267 -0.67891,-0.34377 l 0,0 0,0 c -0.16973,-0.21711 -0.26672,-0.47041 -0.26672,-0.79608 l 0,0 0,0 c 0,-0.39804 0.14549,-0.72372 0.43645,-0.99512 l 0,0 0,0 c 0.31522,-0.25329 0.67892,-0.39804 1.16385,-0.39804 l 0,0 0,0 c 0.12123,0 0.26673,0.0362 0.43645,0.0905 l 0,0 0,0 c 0,-0.61515 -0.24247,-0.92273 -0.75165,-0.92273 l 0,0 0,0 c -0.38797,0 -0.65466,0.10857 -0.8729,0.34376 l 0,0 -0.24246,-0.56088 0,0 0,0 c 0.097,-0.10857 0.26671,-0.19902 0.4607,-0.2714 l 0,0 0,0 c 0.19396,-0.0723 0.38793,-0.10857 0.58191,-0.10857 l 0,0 0,0 c 0.50918,0 0.8729,0.12669 1.11536,0.36187 l 0,0 0,0 c 0.21824,0.25329 0.33947,0.66943 0.33947,1.21223 l 0,0 0,1.37506 0,0 0,0 c 0,0.32566 0.097,0.54279 0.2667,0.66943 l 0,0 0,0.32567 0,0 0,0 c -0.24245,0 -0.43643,-0.0362 -0.55767,-0.10857 l 0,0 0,0 c -0.12125,-0.0905 -0.21823,-0.21713 -0.26671,-0.39806 z m -0.0727,-1.42934 0,0 0,0 c -0.19397,-0.0542 -0.33947,-0.0723 -0.4122,-0.0723 l 0,0 0,0 c -0.3152,0 -0.55768,0.0905 -0.7759,0.27139 l 0,0 0,0 c -0.16973,0.16284 -0.26671,0.37996 -0.26671,0.61517 l 0,0 0,0 c 0,0.39804 0.21821,0.59706 0.63041,0.59706 l 0,0 0,0 c 0.31522,0 0.58193,-0.16284 0.8244,-0.4885 l 0,-0.92275 z" 2.33 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.34 - id="165" 2.35 - inkscape:connector-curvature="0" /> 2.36 - <path 2.37 - d="m 289.63998,462.61165 0,0 0,-2.22543 0,0 0,0 c 0,-0.41613 -0.0485,-0.68753 -0.16971,-0.85037 l 0,0 0,0 c -0.12124,-0.16284 -0.29097,-0.2533 -0.55769,-0.2533 l 0,0 0,0 c -0.14548,0 -0.29096,0.0542 -0.46069,0.14475 l 0,0 0,0 c -0.14549,0.0905 -0.26672,0.19902 -0.33945,0.34377 l 0,0 0,2.84058 -0.63044,0 0,-3.81761 0.43647,0 0.19397,0.48851 0,0 0,0 c 0.19396,-0.37995 0.53343,-0.56089 0.99413,-0.56089 l 0,0 0,0 c 0.7759,0 1.13959,0.50662 1.13959,1.51981 l 0,0 0,2.37018 -0.60618,0 z" 2.38 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.39 - id="166" 2.40 - inkscape:connector-curvature="0" /> 2.41 - <path 2.42 - d="m 290.90083,462.37645 0,0 0.21823,-0.65135 0,0 0,0 c 0.33945,0.25329 0.63042,0.37995 0.8244,0.37995 l 0,0 0,0 c 0.38795,0 0.58192,-0.18093 0.58192,-0.5247 l 0,0 0,0 c 0,-0.25329 -0.19397,-0.47042 -0.55767,-0.65135 l 0,0 0,0 c -0.29098,-0.14474 -0.48495,-0.25329 -0.58193,-0.32567 l 0,0 0,0 c -0.097,-0.0723 -0.16973,-0.16284 -0.24247,-0.2533 l 0,0 0,0 c -0.0727,-0.0904 -0.1455,-0.19902 -0.16973,-0.28949 l 0,0 0,0 c -0.0485,-0.10857 -0.0485,-0.2352 -0.0485,-0.34376 l 0,0 0,0 c 0,-0.32568 0.097,-0.56088 0.31522,-0.74181 l 0,0 0,0 c 0.19398,-0.18093 0.48493,-0.25331 0.82439,-0.25331 l 0,0 0,0 c 0.24247,0 0.55769,0.0723 0.94563,0.25331 l 0,0 -0.16973,0.63326 0,0 0,0 c -0.24246,-0.21713 -0.48495,-0.32568 -0.75165,-0.32568 l 0,0 0,0 c -0.14548,0 -0.26671,0.0362 -0.36371,0.10858 l 0,0 0,0 c -0.097,0.0905 -0.14549,0.18093 -0.14549,0.28949 l 0,0 0,0 c 0,0.2533 0.12124,0.43424 0.36372,0.56088 l 0,0 0.46068,0.21712 0,0 0,0 c 0.26673,0.14474 0.4607,0.28948 0.58193,0.47041 l 0,0 0,0 c 0.12124,0.18093 0.19399,0.39806 0.19399,0.65135 l 0,0 0,0 c 0,0.34377 -0.097,0.61517 -0.33947,0.7961 l 0,0 0,0 c -0.21821,0.19902 -0.50918,0.30756 -0.89713,0.30756 l 0,0 0,0 c -0.38795,0 -0.72741,-0.10857 -1.04263,-0.30756 z" 2.43 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.44 - id="167" 2.45 - inkscape:connector-curvature="0" /> 2.46 - <path 2.47 - d="m 295.72598,457.83511 0,0 0,0 c -0.12123,-0.0542 -0.24246,-0.0723 -0.36369,-0.0723 l 0,0 0,0 c -0.16974,0 -0.33947,0.0723 -0.4607,0.2352 l 0,0 0,0 c -0.12124,0.14475 -0.19397,0.34377 -0.19397,0.59708 l 0,0 0,0 c 0,0.0542 0.0242,0.12669 0.0242,0.19902 l 0,0 0.72742,0 0,0.56088 -0.72742,0 0,3.25673 -0.60616,0 0,-3.25673 -0.53343,0 0,-0.56088 0.53343,0 0,0 0,0 c 0,-0.48851 0.097,-0.88655 0.3152,-1.15795 l 0,0 0,0 c 0.21823,-0.27139 0.5092,-0.41614 0.8729,-0.41614 l 0,0 0,0 c 0.19398,0 0.38794,0.0362 0.58193,0.10858 l -0.16974,0.5066 z" 2.48 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.49 - id="168" 2.50 - inkscape:connector-curvature="0" /> 2.51 - <path 2.52 - d="m 296.0412,460.6938 0,0 0,0 c 0,-0.59707 0.14548,-1.06748 0.43643,-1.42934 l 0,0 0,0 c 0.29097,-0.36186 0.67892,-0.5428 1.16387,-0.5428 l 0,0 0,0 c 0.50918,0 0.89713,0.16284 1.16384,0.50662 l 0,0 0,0 c 0.26674,0.36184 0.4122,0.83226 0.4122,1.46552 l 0,0 0,0 c 0,0.61517 -0.14546,1.08557 -0.4122,1.44743 l 0,0 0,0 c -0.29096,0.36186 -0.67891,0.54279 -1.16384,0.54279 l 0,0 0,0 c -0.50919,0 -0.89714,-0.18093 -1.16387,-0.54279 l 0,0 0,0 c -0.29095,-0.36186 -0.43643,-0.85037 -0.43643,-1.44743 z m 0.65467,0 0,0 0,0 c 0,0.95893 0.31521,1.42934 0.94563,1.42934 l 0,0 0,0 c 0.29096,0 0.50918,-0.1267 0.67891,-0.37995 l 0,0 0,0 c 0.16973,-0.25329 0.24247,-0.61517 0.24247,-1.04939 l 0,0 0,0 c 0,-0.95893 -0.3152,-1.42934 -0.92138,-1.42934 l 0,0 0,0 c -0.29097,0 -0.50919,0.1267 -0.67892,0.37995 l 0,0 0,0 c -0.16973,0.2533 -0.26671,0.59706 -0.26671,1.04939 z" 2.53 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.54 - id="169" 2.55 - inkscape:connector-curvature="0" /> 2.56 - <path 2.57 - d="m 301.78774,459.44539 0,0 0,0 c -0.14549,-0.10858 -0.26674,-0.16284 -0.41222,-0.16284 l 0,0 0,0 c -0.21822,0 -0.41218,0.10858 -0.58191,0.32568 l 0,0 0,0 c -0.16974,0.2352 -0.24247,0.4885 -0.24247,0.81417 l 0,0 0,2.18925 -0.63043,0 0,-3.81761 0.63043,0 0,0.59706 0,0 0,0 c 0.21822,-0.45231 0.55768,-0.66944 1.01836,-0.66944 l 0,0 0,0 c 0.097,0 0.26672,0.0181 0.43645,0.0544 l -0.21821,0.66944 z" 2.58 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.59 - id="170" 2.60 - inkscape:connector-curvature="0" /> 2.61 - <path 2.62 - d="m 306.51589,462.61165 0,0 0,-2.42445 0,0 0,0 c 0,-0.59708 -0.24248,-0.90465 -0.72741,-0.90465 l 0,0 0,0 c -0.14549,0 -0.29097,0.0542 -0.4122,0.16284 l 0,0 0,0 c -0.12124,0.0905 -0.21822,0.19902 -0.26672,0.34377 l 0,0 0,2.82249 -0.63041,0 0,-2.71394 0,0 0,0 c 0,-0.19902 -0.0485,-0.34377 -0.19399,-0.45232 l 0,0 0,0 c -0.12123,-0.10858 -0.29096,-0.16284 -0.50918,-0.16284 l 0,0 0,0 c -0.12123,0 -0.26671,0.0542 -0.38795,0.16284 l 0,0 0,0 c -0.14548,0.10858 -0.24246,0.21711 -0.31521,0.34377 l 0,0 0,2.82249 -0.60617,0 0,-3.81761 0.38795,0 0.21822,0.43424 0,0 0,0 c 0.24246,-0.34378 0.53343,-0.50662 0.89714,-0.50662 l 0,0 0,0 c 0.50919,0 0.84864,0.16284 1.04262,0.50662 l 0,0 0,0 c 0.0727,-0.14475 0.21823,-0.2714 0.38795,-0.36187 l 0,0 0,0 c 0.19396,-0.10858 0.38795,-0.14475 0.60618,-0.14475 l 0,0 0,0 c 0.3637,0 0.63041,0.10858 0.82438,0.34378 l 0,0 0,0 c 0.19398,0.2352 0.31522,0.56088 0.31522,0.97701 l 0,0 0,2.5692 -0.63042,0 z" 2.63 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.64 - id="171" 2.65 - inkscape:connector-curvature="0" /> 2.66 - <path 2.67 - d="m 277.51651,469.45079 0,0 0,0 c -0.24248,0.34377 -0.63043,0.5066 -1.13961,0.5066 l 0,0 0,0 c -0.26672,0 -0.5092,-0.10857 -0.70317,-0.32567 l 0,0 0,0 c -0.21821,-0.21711 -0.31521,-0.48851 -0.31521,-0.81419 l 0,0 0,0 c 0,-0.37995 0.14548,-0.70562 0.4607,-0.97702 l 0,0 0,0 c 0.31521,-0.27139 0.70316,-0.39804 1.18809,-0.39804 l 0,0 0,0 c 0.14549,0 0.29097,0.0181 0.4607,0.0905 l 0,0 0,0 c 0,-0.61517 -0.26671,-0.92275 -0.7759,-0.92275 l 0,0 0,0 c -0.38796,0 -0.67891,0.10857 -0.89714,0.34376 l 0,0 -0.24247,-0.57897 0,0 0,0 c 0.097,-0.10857 0.26672,-0.19902 0.48493,-0.2714 l 0,0 0,0 c 0.19399,-0.0723 0.4122,-0.10857 0.58193,-0.10857 l 0,0 0,0 c 0.50919,0 0.89715,0.12669 1.11537,0.37995 l 0,0 0,0 c 0.24246,0.25329 0.33945,0.65135 0.33945,1.19413 l 0,0 0,1.37507 0,0 0,0 c 0,0.34376 0.0727,0.56087 0.26673,0.66944 l 0,0 0,0.34376 0,0 0,0 c -0.24248,0 -0.43647,-0.0362 -0.5577,-0.12669 l 0,0 0,0 c -0.12123,-0.0723 -0.21821,-0.19902 -0.2667,-0.37995 z m -0.0485,-1.44744 0,0 0,0 c -0.19398,-0.0362 -0.33946,-0.0542 -0.4122,-0.0542 l 0,0 0,0 c -0.31521,0 -0.58193,0.0723 -0.77589,0.25331 l 0,0 0,0 c -0.19399,0.18092 -0.29097,0.37994 -0.29097,0.63324 l 0,0 0,0 c 0,0.39805 0.21822,0.57898 0.63041,0.57898 l 0,0 0,0 c 0.31522,0 0.60617,-0.16283 0.84865,-0.48851 l 0,-0.92275 z" 2.68 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.69 - id="172" 2.70 - inkscape:connector-curvature="0" /> 2.71 - <path 2.72 - d="m 281.20204,469.88501 0,0 0,-2.22543 0,0 0,0 c 0,-0.39804 -0.0727,-0.68753 -0.16972,-0.85037 l 0,0 0,0 c -0.12123,-0.16282 -0.31522,-0.2352 -0.58193,-0.2352 l 0,0 0,0 c -0.14548,0 -0.29097,0.0362 -0.43645,0.12669 l 0,0 0,0 c -0.14548,0.0905 -0.26672,0.21711 -0.3637,0.34377 l 0,0 0,2.84059 -0.60618,0 0,-3.81761 0.4122,0 0.19398,0.48851 0,0 0,0 c 0.21822,-0.36186 0.55768,-0.56088 1.01836,-0.56088 l 0,0 0,0 c 0.75167,0 1.13962,0.5066 1.13962,1.5198 l 0,0 0,2.37018 -0.60618,0 z" 2.73 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.74 - id="173" 2.75 - inkscape:connector-curvature="0" /> 2.76 - <path 2.77 - d="m 284.86333,469.88501 0,0 0,-0.28947 0,0 0,0 c -0.19397,0.2352 -0.50918,0.36185 -0.89713,0.36185 l 0,0 0,0 c -0.43645,0 -0.7759,-0.18092 -1.06687,-0.52469 l 0,0 0,0 c -0.26671,-0.32568 -0.38795,-0.7961 -0.38795,-1.35697 l 0,0 0,0 c 0,-0.57899 0.14549,-1.06748 0.4607,-1.46554 l 0,0 0,0 c 0.3152,-0.41613 0.67892,-0.61515 1.0911,-0.61515 l 0,0 0,0 c 0.36372,0 0.63043,0.0905 0.80015,0.27138 l 0,0 0,-1.73692 0.63043,0 0,5.35551 -0.63043,0 z m 0,-2.93105 0,0 0,0 c -0.14547,-0.2533 -0.33945,-0.37995 -0.60617,-0.37995 l 0,0 0,0 c -0.31521,0 -0.58193,0.12669 -0.80015,0.39804 l 0,0 0,0 c -0.19398,0.2714 -0.29096,0.61516 -0.29096,1.0313 l 0,0 0,0 c 0,0.92275 0.3637,1.39315 1.11536,1.39315 l 0,0 0,0 c 0.097,0 0.21823,-0.0362 0.3637,-0.10857 l 0,0 0,0 c 0.097,-0.0723 0.19398,-0.14475 0.21822,-0.21712 l 0,-2.11688 z" 2.78 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.79 - id="174" 2.80 - inkscape:connector-curvature="0" /> 2.81 - <path 2.82 - d="m 289.10657,465.30751 0,1.44743 1.55179,0 0,0.61516 -1.55179,0 0,1.88167 2.13373,0 0,0.63324 -2.78841,0 0,-5.21076 2.8369,0 0,0.63326 -2.18222,0 z" 2.83 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.84 - id="175" 2.85 - inkscape:connector-curvature="0" /> 2.86 - <path 2.87 - d="m 294.07719,469.88501 -0.94563,-1.39315 -0.84865,1.39315 -0.7274,0 1.26085,-1.95403 -1.16387,-1.86358 0.70315,0 0.77592,1.32079 0.89714,-1.32079 0.67892,0 -1.26085,1.86358 1.38208,1.95403 -0.75166,0 z" 2.88 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.89 - id="176" 2.90 - inkscape:connector-curvature="0" /> 2.91 - <path 2.92 - d="m 295.53202,466.61019 0,0 -0.38797,0 0,-0.54279 0.38797,0 0,-0.79609 0.60616,-0.2533 0,1.04939 0.96988,0 0,0.54279 -0.96988,0 0,1.88167 0,0 0,0 c 0,0.32567 0.0485,0.56088 0.14549,0.68753 l 0,0 0,0 c 0.097,0.14475 0.26671,0.21711 0.48493,0.21711 l 0,0 0,0 c 0.1455,0 0.31521,-0.0542 0.48495,-0.14473 l 0,0 0.097,0.59706 0,0 0,0 c -0.26672,0.0723 -0.53343,0.10858 -0.84865,0.10858 l 0,0 0,0 c -0.2667,0 -0.48493,-0.10858 -0.67891,-0.34377 l 0,0 0,0 c -0.19397,-0.21712 -0.29095,-0.5066 -0.29095,-0.85037 l 0,-2.15307 z" 2.93 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.94 - id="177" 2.95 - inkscape:connector-curvature="0" /> 2.96 - <path 2.97 - d="m 299.84797,466.71875 0,0 0,0 c -0.12123,-0.10857 -0.26671,-0.14474 -0.41219,-0.14474 l 0,0 0,0 c -0.21824,0 -0.4122,0.10857 -0.55769,0.32567 l 0,0 0,0 c -0.16973,0.21711 -0.26671,0.48851 -0.26671,0.7961 l 0,0 0,2.18923 -0.60618,0 0,-3.81761 0.60618,0 0,0.61517 0,0 0,0 c 0.24246,-0.45233 0.58193,-0.68753 1.01838,-0.68753 l 0,0 0,0 c 0.12123,0 0.2667,0.0181 0.48493,0.0723 l -0.26672,0.65135 z" 2.98 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.99 - id="178" 2.100 - inkscape:connector-curvature="0" /> 2.101 - <path 2.102 - d="m 302.51513,469.45079 0,0 0,0 c -0.26671,0.34377 -0.60616,0.5066 -1.11536,0.5066 l 0,0 0,0 c -0.29095,0 -0.53343,-0.10857 -0.7274,-0.32567 l 0,0 0,0 c -0.19398,-0.21711 -0.29096,-0.48851 -0.29096,-0.81419 l 0,0 0,0 c 0,-0.37995 0.14548,-0.70562 0.46068,-0.97702 l 0,0 0,0 c 0.31521,-0.27139 0.70316,-0.39804 1.16386,-0.39804 l 0,0 0,0 c 0.12124,0 0.26672,0.0181 0.43645,0.0905 l 0,0 0,0 c 0,-0.61517 -0.24248,-0.92275 -0.72741,-0.92275 l 0,0 0,0 c -0.38795,0 -0.67892,0.10857 -0.89714,0.34376 l 0,0 -0.26671,-0.57897 0,0 0,0 c 0.12123,-0.10857 0.29095,-0.19902 0.48493,-0.2714 l 0,0 0,0 c 0.21822,-0.0723 0.4122,-0.10857 0.60618,-0.10857 l 0,0 0,0 c 0.48494,0 0.84865,0.12669 1.0911,0.37995 l 0,0 0,0 c 0.21823,0.25329 0.33947,0.65135 0.33947,1.19413 l 0,0 0,1.37507 0,0 0,0 c 0,0.34376 0.097,0.56087 0.26671,0.66944 l 0,0 0,0.34376 0,0 0,0 c -0.24246,0 -0.43645,-0.0362 -0.55768,-0.12669 l 0,0 0,0 c -0.12123,-0.0723 -0.21822,-0.19902 -0.26672,-0.37995 z m -0.0727,-1.44744 0,0 0,0 c -0.19398,-0.0362 -0.31521,-0.0542 -0.4122,-0.0542 l 0,0 0,0 c -0.29096,0 -0.53343,0.0723 -0.72741,0.25331 l 0,0 0,0 c -0.21822,0.18092 -0.3152,0.37994 -0.3152,0.63324 l 0,0 0,0 c 0,0.39805 0.21821,0.57898 0.65466,0.57898 l 0,0 0,0 c 0.3152,0 0.55767,-0.16283 0.80015,-0.48851 l 0,-0.92275 z" 2.103 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.104 - id="179" 2.105 - inkscape:connector-curvature="0" /> 2.106 - <path 2.107 - d="m 306.68562,466.37499 0,0 -0.29096,0.48851 0,0 0,0 c -0.0727,-0.0723 -0.19398,-0.14475 -0.33947,-0.19902 l 0,0 0,0 c -0.16971,-0.0723 -0.3152,-0.0905 -0.48493,-0.0905 l 0,0 0,0 c -0.33945,0 -0.60618,0.1267 -0.80015,0.37995 l 0,0 0,0 c -0.19398,0.25331 -0.29096,0.61517 -0.29096,1.06748 l 0,0 0,0 c 0,0.43424 0.097,0.77801 0.29096,1.01321 l 0,0 0,0 c 0.21822,0.23522 0.48493,0.36186 0.84863,0.36186 l 0,0 0,0 c 0.29099,0 0.55769,-0.1267 0.84865,-0.36186 l 0,0 0.24248,0.57898 0,0 0,0 c -0.33946,0.23521 -0.75166,0.34377 -1.23661,0.34377 l 0,0 0,0 c -0.48493,0 -0.87288,-0.18093 -1.1881,-0.5247 l 0,0 0,0 c -0.3152,-0.34376 -0.46068,-0.81418 -0.46068,-1.41126 l 0,0 0,0 c 0,-0.61515 0.14548,-1.10366 0.48493,-1.46552 l 0,0 0,0 c 0.31522,-0.37995 0.75167,-0.56088 1.33358,-0.56088 l 0,0 0,0 c 0.16974,0 0.36372,0.0362 0.58194,0.1267 l 0,0 0,0 c 0.21821,0.0904 0.36371,0.16283 0.46069,0.25331 z" 2.108 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.109 - id="180" 2.110 - inkscape:connector-curvature="0" /> 2.111 - <path 2.112 - d="m 307.58276,466.61019 0,0 -0.38795,0 0,-0.54279 0.38795,0 0,-0.79609 0.60618,-0.2533 0,1.04939 0.96988,0 0,0.54279 -0.96988,0 0,1.88167 0,0 0,0 c 0,0.32567 0.0485,0.56088 0.14546,0.68753 l 0,0 0,0 c 0.097,0.14475 0.26674,0.21711 0.48495,0.21711 l 0,0 0,0 c 0.16973,0 0.31522,-0.0542 0.48495,-0.14473 l 0,0 0.097,0.59706 0,0 0,0 c -0.24246,0.0723 -0.53343,0.10858 -0.84864,0.10858 l 0,0 0,0 c -0.26672,0 -0.50919,-0.10858 -0.67892,-0.34377 l 0,0 0,0 c -0.19398,-0.21712 -0.29096,-0.5066 -0.29096,-0.85037 l 0,-2.15307 z" 2.113 - style="fill:#217867;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.114 - id="181" 2.115 - inkscape:connector-curvature="0" /> 2.116 - <path 2.117 - d="m 270.55763,455.03071 0,0 c 0,-0.0905 0.0242,-0.16284 0.0727,-0.23521 0.0485,-0.0723 0.12124,-0.12669 0.21822,-0.16284 0.097,-0.0362 0.19398,-0.0543 0.31521,-0.0543 l 0,0 0,0.45233 -0.60616,0 z" 2.118 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.119 - id="182" 2.120 - inkscape:connector-curvature="0" /> 2.121 - <path 2.122 - d="m 271.16379,454.57838 42.60195,0 0,0.45233 0,0.47042 -42.60195,0 0,-0.47042 0,-0.45233 z" 2.123 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.124 - id="183" 2.125 - inkscape:connector-curvature="0" /> 2.126 - <path 2.127 - d="m 313.76574,454.57838 0,0 c 0.12123,0 0.19397,0.0181 0.29097,0.0543 0.097,0.0362 0.16973,0.0905 0.21821,0.16284 0.0485,0.0723 0.097,0.14475 0.097,0.2352 l 0,0 0,0 -0.60617,0 0,-0.45233 z" 2.128 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.129 - id="184" 2.130 - inkscape:connector-curvature="0" /> 2.131 - <path 2.132 - d="m 314.37191,455.03071 0,20.66215 -0.60617,0 -0.60618,0 0,-20.66215 0.60618,0 0.60617,0 z" 2.133 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.134 - id="185" 2.135 - inkscape:connector-curvature="0" /> 2.136 - <path 2.137 - d="m 314.37191,475.69286 0,0 c 0,0.0904 -0.0485,0.16283 -0.097,0.2352 -0.0485,0.0723 -0.12123,0.12669 -0.21821,0.16284 -0.097,0.0362 -0.16974,0.0723 -0.29097,0.0723 l 0,0 0,-0.47042 0.60617,0 z" 2.138 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.139 - id="186" 2.140 - inkscape:connector-curvature="0" /> 2.141 - <path 2.142 - d="m 313.76574,476.16328 -42.60195,0 0,-0.47042 0,-0.45233 42.60195,0 0,0.45233 0,0.47042 z" 2.143 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.144 - id="187" 2.145 - inkscape:connector-curvature="0" /> 2.146 - <path 2.147 - d="m 271.16379,476.16328 0,0 c -0.12123,0 -0.21823,-0.0362 -0.31521,-0.0723 -0.097,-0.0362 -0.16972,-0.0905 -0.21822,-0.16284 -0.0485,-0.0723 -0.0727,-0.14473 -0.0727,-0.2352 l 0,0 0.60616,0 0,0.47042 z" 2.148 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.149 - id="188" 2.150 - inkscape:connector-curvature="0" /> 2.151 - <path 2.152 - d="m 270.55763,475.69286 0,-20.66215 0.60616,0 0.63042,0 0,20.66215 -0.63042,0 -0.60616,0 z" 2.153 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.154 - id="189" 2.155 - inkscape:connector-curvature="0" /> 2.156 - <path 2.157 - d="m 277.17705,488.24937 0,0 -0.21822,0.61516 0,0 0,0 c -0.19398,-0.16284 -0.53345,-0.25332 -0.96988,-0.25332 l 0,0 0,0 c -0.43645,0 -0.77592,0.19903 -1.01838,0.59709 l 0,0 0,0 c -0.26672,0.39804 -0.38795,0.90464 -0.38795,1.51979 l 0,0 0,0 c 0,0.59708 0.14548,1.08559 0.38795,1.44745 l 0,0 0,0 c 0.26671,0.37993 0.60618,0.57897 1.01838,0.57897 l 0,0 0,0 c 0.43643,0 0.80015,-0.18093 1.04261,-0.54279 l 0,0 0.3637,0.56088 0,0 0,0 c -0.38795,0.39804 -0.87288,0.59706 -1.47906,0.59706 l 0,0 0,0 c -0.63042,0 -1.11535,-0.23519 -1.47906,-0.72371 l 0,0 0,0 c -0.3637,-0.50661 -0.53344,-1.15794 -0.53344,-1.95404 l 0,0 0,0 c 0,-0.77799 0.19399,-1.42934 0.58194,-1.95405 l 0,0 0,0 c 0.3637,-0.50659 0.87288,-0.75989 1.47906,-0.75989 l 0,0 0,0 c 0.50918,0 0.92138,0.0904 1.21235,0.2714 z" 2.158 - style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.159 - id="196" 2.160 - inkscape:connector-curvature="0" /> 2.161 - <path 2.162 - d="m 281.1778,488.24937 0,0 -0.21823,0.61516 0,0 0,0 c -0.21822,-0.16284 -0.55768,-0.25332 -0.99413,-0.25332 l 0,0 0,0 c -0.43643,0 -0.75165,0.19903 -1.01836,0.59709 l 0,0 0,0 c -0.24247,0.39804 -0.38795,0.90464 -0.38795,1.51979 l 0,0 0,0 c 0,0.59708 0.14548,1.08559 0.38795,1.44745 l 0,0 0,0 c 0.26671,0.37993 0.60618,0.57897 1.01836,0.57897 l 0,0 0,0 c 0.4607,0 0.80016,-0.18093 1.04263,-0.54279 l 0,0 0.3637,0.56088 0,0 0,0 c -0.38795,0.39804 -0.87288,0.59706 -1.47906,0.59706 l 0,0 0,0 c -0.63044,0 -1.11537,-0.23519 -1.47907,-0.72371 l 0,0 0,0 c -0.33946,-0.50661 -0.5092,-1.15794 -0.5092,-1.95404 l 0,0 0,0 c 0,-0.77799 0.19399,-1.42934 0.55769,-1.95405 l 0,0 0,0 c 0.38796,-0.50659 0.87289,-0.75989 1.47906,-0.75989 l 0,0 0,0 c 0.53345,0 0.9214,0.0904 1.23661,0.2714 z" 2.163 - style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.164 - id="197" 2.165 - inkscape:connector-curvature="0" /> 2.166 - <path 2.167 - d="m 272.18218,485.24593 0,0 c 0,-0.0905 0.0242,-0.16283 0.0727,-0.23521 0.0485,-0.0723 0.12123,-0.12669 0.21821,-0.16283 0.097,-0.0362 0.19399,-0.0542 0.31522,-0.0542 l 0,0 0,0.45231 -0.60616,0 z" 2.168 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.169 - id="198" 2.170 - inkscape:connector-curvature="0" /> 2.171 - <path 2.172 - d="m 272.78834,484.79361 9.67454,0 0,0.45232 0,0.47042 -9.67454,0 0,-0.47042 0,-0.45232 z" 2.173 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.174 - id="199" 2.175 - inkscape:connector-curvature="0" /> 2.176 - <path 2.177 - d="m 282.46288,484.79361 0,0 c 0.12124,0 0.21822,0.0181 0.31522,0.0542 0.097,0.0362 0.16973,0.0905 0.21822,0.16284 0.0485,0.0723 0.097,0.14475 0.097,0.2352 l 0,0 0,0 -0.63044,0 0,-0.45231 z" 2.178 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.179 - id="200" 2.180 - inkscape:connector-curvature="0" /> 2.181 - <path 2.182 - d="m 283.09332,485.24593 0,10.85577 -0.63044,0 -0.60616,0 0,-10.85577 0.60616,0 0.63044,0 z" 2.183 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.184 - id="201" 2.185 - inkscape:connector-curvature="0" /> 2.186 - <path 2.187 - d="m 283.09332,496.1017 0,0 c 0,0.0905 -0.0485,0.16285 -0.097,0.23522 -0.0485,0.0723 -0.12124,0.12669 -0.21822,0.16283 -0.097,0.0362 -0.19398,0.0723 -0.31522,0.0723 l 0,0 0,-0.47042 0.63044,0 z" 2.188 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.189 - id="202" 2.190 - inkscape:connector-curvature="0" /> 2.191 - <path 2.192 - d="m 282.46288,496.57212 -9.67454,0 0,-0.47042 0,-0.45232 9.67454,0 0,0.45232 0,0.47042 z" 2.193 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.194 - id="203" 2.195 - inkscape:connector-curvature="0" /> 2.196 - <path 2.197 - d="m 272.78834,496.57212 0,0 c -0.12123,0 -0.21822,-0.0362 -0.31522,-0.0723 -0.097,-0.0362 -0.16973,-0.0905 -0.21821,-0.16284 -0.0485,-0.0723 -0.0727,-0.14474 -0.0727,-0.23521 l 0,0 0.60616,0 0,0.47042 z" 2.198 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.199 - id="204" 2.200 - inkscape:connector-curvature="0" /> 2.201 - <path 2.202 - d="m 272.18218,496.1017 0,-10.85577 0.60616,0 0.63043,0 0,10.85577 -0.63043,0 -0.60616,0 z" 2.203 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.204 - id="205" 2.205 - inkscape:connector-curvature="0" /> 2.206 - <path 2.207 - d="m 306.80686,488.24937 0,0 -0.21822,0.61516 0,0 0,0 c -0.19398,-0.16284 -0.53345,-0.25332 -0.9699,-0.25332 l 0,0 0,0 c -0.43643,0 -0.77589,0.19903 -1.01836,0.59709 l 0,0 0,0 c -0.26672,0.39804 -0.38795,0.90464 -0.38795,1.51979 l 0,0 0,0 c 0,0.59708 0.14548,1.08559 0.38795,1.44745 l 0,0 0,0 c 0.26672,0.37993 0.60618,0.57897 1.01836,0.57897 l 0,0 0,0 c 0.43645,0 0.80017,-0.18093 1.04263,-0.54279 l 0,0 0.33945,0.56088 0,0 0,0 c -0.3637,0.39804 -0.84864,0.59706 -1.45481,0.59706 l 0,0 0,0 c -0.63043,0 -1.11536,-0.23519 -1.47906,-0.72371 l 0,0 0,0 c -0.3637,-0.50661 -0.53344,-1.15794 -0.53344,-1.95404 l 0,0 0,0 c 0,-0.77799 0.19397,-1.42934 0.58192,-1.95405 l 0,0 0,0 c 0.36372,-0.50659 0.8729,-0.75989 1.47906,-0.75989 l 0,0 0,0 c 0.5092,0 0.9214,0.0904 1.21237,0.2714 z" 2.208 - style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.209 - id="206" 2.210 - inkscape:connector-curvature="0" /> 2.211 - <path 2.212 - d="m 310.80761,488.24937 0,0 -0.24248,0.61516 0,0 0,0 c -0.19398,-0.16284 -0.53343,-0.25332 -0.96988,-0.25332 l 0,0 0,0 c -0.43643,0 -0.7759,0.19903 -1.01836,0.59709 l 0,0 0,0 c -0.24249,0.39804 -0.38795,0.90464 -0.38795,1.51979 l 0,0 0,0 c 0,0.59708 0.14546,1.08559 0.38795,1.44745 l 0,0 0,0 c 0.26671,0.37993 0.60616,0.57897 1.01836,0.57897 l 0,0 0,0 c 0.4607,0 0.80015,-0.18093 1.04263,-0.54279 l 0,0 0.3637,0.56088 0,0 0,0 c -0.38795,0.39804 -0.87288,0.59706 -1.47906,0.59706 l 0,0 0,0 c -0.63043,0 -1.11537,-0.23519 -1.47907,-0.72371 l 0,0 0,0 c -0.33946,-0.50661 -0.50919,-1.15794 -0.50919,-1.95404 l 0,0 0,0 c 0,-0.77799 0.19398,-1.42934 0.55768,-1.95405 l 0,0 0,0 c 0.38796,-0.50659 0.8729,-0.75989 1.47906,-0.75989 l 0,0 0,0 c 0.53345,0 0.9214,0.0904 1.23661,0.2714 z" 2.213 - style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.214 - id="207" 2.215 - inkscape:connector-curvature="0" /> 2.216 - <path 2.217 - d="m 301.83622,485.24593 0,0 c 0,-0.0905 0.0242,-0.16283 0.0727,-0.23521 0.0485,-0.0723 0.097,-0.12669 0.19397,-0.16283 0.097,-0.0362 0.19398,-0.0542 0.31521,-0.0542 l 0,0 0,0.45231 -0.58193,0 z" 2.218 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.219 - id="208" 2.220 - inkscape:connector-curvature="0" /> 2.221 - <path 2.222 - d="m 302.41815,484.79361 9.67454,0 0,0.45232 0,0.47042 -9.67454,0 0,-0.47042 0,-0.45232 z" 2.223 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.224 - id="209" 2.225 - inkscape:connector-curvature="0" /> 2.226 - <path 2.227 - d="m 312.09269,484.79361 0,0 c 0.12124,0 0.21822,0.0181 0.31522,0.0542 0.097,0.0362 0.16972,0.0905 0.21822,0.16284 0.0485,0.0723 0.097,0.14475 0.097,0.2352 l 0,0 0,0 -0.63044,0 0,-0.45231 z" 2.228 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.229 - id="210" 2.230 - inkscape:connector-curvature="0" /> 2.231 - <path 2.232 - d="m 312.72313,485.24593 0,10.85577 -0.63044,0 -0.60616,0 0,-10.85577 0.60616,0 0.63044,0 z" 2.233 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.234 - id="211" 2.235 - inkscape:connector-curvature="0" /> 2.236 - <path 2.237 - d="m 312.72313,496.1017 0,0 c 0,0.0905 -0.0485,0.16285 -0.097,0.23522 -0.0485,0.0723 -0.12124,0.12669 -0.21822,0.16283 -0.097,0.0362 -0.19398,0.0723 -0.31522,0.0723 l 0,0 0,-0.47042 0.63044,0 z" 2.238 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.239 - id="212" 2.240 - inkscape:connector-curvature="0" /> 2.241 - <path 2.242 - d="m 312.09269,496.57212 -9.67454,0 0,-0.47042 0,-0.45232 9.67454,0 0,0.45232 0,0.47042 z" 2.243 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.244 - id="213" 2.245 - inkscape:connector-curvature="0" /> 2.246 - <path 2.247 - d="m 302.41815,496.57212 0,0 c -0.12123,0 -0.21823,-0.0362 -0.31521,-0.0723 -0.097,-0.0362 -0.14549,-0.0905 -0.19397,-0.16284 -0.0485,-0.0723 -0.0727,-0.14474 -0.0727,-0.23521 l 0,0 0.58193,0 0,0.47042 z" 2.248 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.249 - id="214" 2.250 - inkscape:connector-curvature="0" /> 2.251 - <path 2.252 - d="m 301.83622,496.1017 0,-10.85577 0.58193,0 0.63042,0 0,10.85577 -0.63042,0 -0.58193,0 z" 2.253 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.254 - id="215" 2.255 - inkscape:connector-curvature="0" /> 2.256 - <path 2.257 - d="m 294.3924,474.86058 13.02062,9.20932 -0.38795,0.30757 -0.38795,0.30758 -13.02063,-9.20931 0.38797,-0.30758 0.38794,-0.30758 z" 2.258 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.259 - id="216" 2.260 - inkscape:connector-curvature="0" /> 2.261 - <path 2.262 - d="m 304.60038,479.83614 0,0 3.51581,5.31933 -7.2741,-2.334 0,0 0,0 c 1.96401,-0.27138 3.49157,-1.48361 3.75829,-2.98533 z" 2.263 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.264 - id="217" 2.265 - inkscape:connector-curvature="0" /> 2.266 - <path 2.267 - d="m 291.2403,475.47574 -12.99639,9.20931 -0.3637,-0.30758 -0.38795,-0.30757 12.97214,-9.20932 0.38795,0.30758 0.38795,0.30758 z" 2.268 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.269 - id="218" 2.270 - inkscape:connector-curvature="0" /> 2.271 - <path 2.272 - d="m 284.06318,482.83958 0,0 -7.27408,2.31589 3.51581,-5.30124 0,0 0,0 c 0.24246,1.48363 1.77002,2.69586 3.75827,2.98535 z" 2.273 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.274 - id="219" 2.275 - inkscape:connector-curvature="0" /> 2.276 - </g> 2.277 <path 2.278 inkscape:connector-curvature="0" 2.279 id="220" 2.280 @@ -1927,191 +1668,6 @@ 2.281 id="495" 2.282 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.283 d="m 542.00254,606.39634 58.36248,0.34376 0,0.43423 0,0.43423 -58.36248,-0.34378 0,-0.43423 0,-0.43421 z" /> 2.284 - <path 2.285 - inkscape:connector-curvature="0" 2.286 - id="496" 2.287 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.288 - d="m 210.57059,404.08095 0,0 1.79428,-0.14474 0,0 0,0 c 0.0485,0.66944 0.24247,1.23033 0.55768,1.66455 l 0,0 0,0 c 0.31522,0.43424 0.7759,0.77801 1.43057,1.04939 l 0,0 0,0 c 0.65468,0.2714 1.38208,0.39804 2.20649,0.39804 l 0,0 0,0 c 0.7274,0 1.35783,-0.10857 1.89125,-0.30757 l 0,0 0,0 c 0.53343,-0.19902 0.94564,-0.47042 1.21234,-0.83227 l 0,0 0,0 c 0.29097,-0.34377 0.41222,-0.74181 0.41222,-1.15796 l 0,0 0,0 c 0,-0.41613 -0.12123,-0.77799 -0.38797,-1.10366 l 0,0 0,0 c -0.2667,-0.30758 -0.67891,-0.57898 -1.28508,-0.7961 l 0,0 0,0 c -0.3637,-0.14474 -1.21234,-0.36185 -2.52167,-0.65135 l 0,0 0,0 c -1.30935,-0.30756 -2.23073,-0.57896 -2.76416,-0.85036 l 0,0 0,0 c -0.67892,-0.32567 -1.16387,-0.74181 -1.50332,-1.24842 l 0,0 0,0 c -0.33946,-0.5066 -0.48494,-1.04939 -0.48494,-1.66455 l 0,0 0,0 c 0,-0.66943 0.19398,-1.32078 0.60618,-1.89976 l 0,0 0,0 c 0.41218,-0.59706 0.96988,-1.04939 1.77001,-1.35696 l 0,0 0,0 c 0.77591,-0.30758 1.64881,-0.45233 2.61869,-0.45233 l 0,0 0,0 c 1.06687,0 1.98825,0.16284 2.7884,0.48851 l 0,0 0,0 c 0.80014,0.30759 1.43058,0.79608 1.86702,1.41125 l 0,0 0,0 c 0.43644,0.63326 0.65467,1.33888 0.70317,2.11687 l 0,0 -1.81855,0.14475 0,0 0,0 c -0.097,-0.85037 -0.43643,-1.50172 -0.99411,-1.93594 l 0,0 0,0 c -0.53343,-0.43424 -1.35783,-0.65135 -2.47319,-0.65135 l 0,0 0,0 c -1.13962,0 -1.96402,0.19902 -2.49745,0.59707 l 0,0 0,0 c -0.50918,0.37995 -0.7759,0.86846 -0.7759,1.42934 l 0,0 0,0 c 0,0.47042 0.16974,0.86846 0.55769,1.17604 l 0,0 0,0 c 0.3637,0.30757 1.30933,0.63325 2.83689,0.95892 l 0,0 0,0 c 1.55181,0.32568 2.57018,0.61517 3.15211,0.85037 l 0,0 0,0 c 0.8244,0.36186 1.43058,0.83228 1.84276,1.37507 l 0,0 0,0 c 0.38797,0.56087 0.58193,1.19413 0.58193,1.91785 l 0,0 0,0 c 0,0.72373 -0.21821,1.39315 -0.65466,2.02641 l 0,0 0,0 c -0.43644,0.63326 -1.04262,1.13986 -1.86701,1.48363 l 0,0 0,0 c -0.8244,0.36186 -1.72155,0.52469 -2.73991,0.52469 l 0,0 0,0 c -1.2851,0 -2.37622,-0.16283 -3.2491,-0.52469 l 0,0 0,0 c -0.87289,-0.36186 -1.52756,-0.88655 -2.03676,-1.61028 l 0,0 0,0 c -0.48493,-0.70563 -0.75165,-1.5198 -0.7759,-2.42446 z" /> 2.289 - <path 2.290 - inkscape:connector-curvature="0" 2.291 - id="497" 2.292 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.293 - d="m 223.63973,403.53817 0,0 0,0 c 0,-1.80929 0.53343,-3.14817 1.57604,-4.01663 l 0,0 0,0 c 0.87289,-0.70563 1.96402,-1.06749 3.2491,-1.06749 l 0,0 0,0 c 1.43058,0 2.57017,0.43423 3.46732,1.30269 l 0,0 0,0 c 0.89713,0.86846 1.35783,2.08069 1.35783,3.63668 l 0,0 0,0 c 0,1.26652 -0.19398,2.24353 -0.60618,2.96725 l 0,0 0,0 c -0.38795,0.72372 -0.96988,1.2846 -1.74578,1.68264 l 0,0 0,0 c -0.72741,0.39805 -1.57606,0.59707 -2.47319,0.59707 l 0,0 0,0 c -1.45482,0 -2.61868,-0.43423 -3.51581,-1.32079 l 0,0 0,0 c -0.8729,-0.86846 -1.30933,-2.13496 -1.30933,-3.78142 z m 1.77001,0 0,0 0,0 c 0,1.24841 0.29098,2.18925 0.8729,2.8044 l 0,0 0,0 c 0.58193,0.61517 1.30934,0.94084 2.18223,0.94084 l 0,0 0,0 c 0.87289,0 1.60029,-0.32567 2.15797,-0.94084 l 0,0 0,0 c 0.55769,-0.63324 0.84865,-1.57409 0.84865,-2.85868 l 0,0 0,0 c 0,-1.21223 -0.29096,-2.13497 -0.87288,-2.75013 l 0,0 0,0 c -0.5577,-0.61516 -1.26085,-0.94084 -2.13374,-0.94084 l 0,0 0,0 c -0.87289,0 -1.6003,0.32568 -2.18223,0.94084 l 0,0 0,0 c -0.58192,0.61516 -0.8729,1.556 -0.8729,2.80441 z" /> 2.294 - <path 2.295 - inkscape:connector-curvature="0" 2.296 - id="498" 2.297 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.298 - d="m 235.7632,408.42327 0,0 0,-8.4856 -1.5518,0 0,-1.2665 1.5518,0 0,-1.04939 0,0 0,0 c 0,-0.65135 0.0727,-1.13987 0.19398,-1.44745 l 0,0 0,0 c 0.16973,-0.43422 0.43645,-0.77799 0.8729,-1.04939 l 0,0 0,0 c 0.4122,-0.27138 1.01836,-0.39804 1.79428,-0.39804 l 0,0 0,0 c 0.48493,0 1.01836,0.0542 1.62454,0.16284 l 0,0 -0.26671,1.44743 0,0 0,0 c -0.36372,-0.0723 -0.70317,-0.0905 -1.01838,-0.0905 l 0,0 0,0 c -0.53343,0 -0.92138,0.10858 -1.13962,0.32568 l 0,0 0,0 c -0.21821,0.19902 -0.33945,0.61515 -0.33945,1.19413 l 0,0 0,0.90465 2.03675,0 0,1.2665 -2.03675,0 0,8.4856 -1.72154,0 z" /> 2.299 - <path 2.300 - inkscape:connector-curvature="0" 2.301 - id="499" 2.302 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.303 - d="m 244.68609,406.93964 0,0 0.24249,1.46553 0,0 0,0 c -0.48495,0.0904 -0.94565,0.14474 -1.3336,0.14474 l 0,0 0,0 c -0.63042,0 -1.11536,-0.0905 -1.45481,-0.28948 l 0,0 0,0 c -0.33947,-0.18094 -0.58194,-0.43423 -0.72742,-0.74182 l 0,0 0,0 c -0.14548,-0.32567 -0.21823,-0.97701 -0.21823,-1.95403 l 0,0 0,-5.62691 -1.28508,0 0,-1.2665 1.28508,0 0,-2.42446 1.72154,-0.99511 0,3.41957 1.77003,0 0,1.2665 -1.77003,0 0,5.71737 0,0 0,0 c 0,0.47042 0.0243,0.778 0.097,0.90466 l 0,0 0,0 c 0.0485,0.12669 0.14547,0.2352 0.29095,0.32567 l 0,0 0,0 c 0.14549,0.0723 0.33947,0.10858 0.60618,0.10858 l 0,0 0,0 c 0.19397,0 0.43645,-0.0181 0.7759,-0.0542 z" /> 2.304 - <path 2.305 - inkscape:connector-curvature="0" 2.306 - id="500" 2.307 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.308 - d="m 248.2504,408.42327 0,0 -3.12786,-9.7521 1.79428,0 1.62455,5.6088 0.60618,2.0988 0,0 0,0 c 0.0242,-0.0905 0.21821,-0.77801 0.53343,-2.00833 l 0,0 1.6488,-5.69927 1.81851,0 1.52756,5.645 0.50918,1.86356 0.58194,-1.88165 1.79427,-5.62691 1.69728,0 -3.22484,9.7521 -1.81853,0 -1.64878,-5.86213 -0.38796,-1.66454 -2.10948,7.52667 -1.81853,0 z" /> 2.309 - <path 2.310 - inkscape:connector-curvature="0" 2.311 - id="501" 2.312 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.313 - d="m 267.454,407.21103 0,0 0,0 c -0.65466,0.5247 -1.28508,0.88657 -1.84276,1.10368 l 0,0 0,0 c -0.60618,0.21711 -1.26085,0.32567 -1.93976,0.32567 l 0,0 0,0 c -1.13961,0 -2.0125,-0.2714 -2.64293,-0.79609 l 0,0 0,0 c -0.60616,-0.5247 -0.87288,-1.19414 -0.87288,-2.00832 l 0,0 0,0 c 0,-0.47041 0.0727,-0.90465 0.3152,-1.30269 l 0,0 0,0 c 0.21823,-0.39804 0.53345,-0.70562 0.89715,-0.95893 l 0,0 0,0 c 0.38795,-0.2352 0.80015,-0.41613 1.26083,-0.54279 l 0,0 0,0 c 0.36371,-0.0723 0.8729,-0.16283 1.57606,-0.2352 l 0,0 0,0 c 1.40633,-0.16284 2.4247,-0.36186 3.10361,-0.57898 l 0,0 0,0 c 0,-0.21712 0,-0.36186 0,-0.43423 l 0,0 0,0 c 0,-0.66944 -0.16972,-1.13986 -0.48493,-1.42934 l 0,0 0,0 c -0.4607,-0.36185 -1.09112,-0.56089 -1.98826,-0.56089 l 0,0 0,0 c -0.8244,0 -1.43057,0.14475 -1.81852,0.41615 l 0,0 0,0 c -0.38796,0.27138 -0.67891,0.7599 -0.87289,1.44743 l 0,0 -1.72153,-0.21711 0,0 0,0 c 0.16971,-0.68754 0.4122,-1.24841 0.7759,-1.68265 l 0,0 0,0 c 0.36371,-0.39804 0.87289,-0.74181 1.55181,-0.95892 l 0,0 0,0 c 0.67891,-0.23522 1.45481,-0.34377 2.35196,-0.34377 l 0,0 0,0 c 0.87288,0 1.57605,0.0905 2.13373,0.28948 l 0,0 0,0 c 0.53343,0.19904 0.94563,0.43424 1.21234,0.72372 l 0,0 0,0 c 0.26672,0.28949 0.43645,0.66944 0.55769,1.12177 l 0,0 0,0 c 0.0485,0.28949 0.0727,0.79609 0.0727,1.5379 l 0,0 0,2.18925 0,0 0,0 c 0,1.55599 0.0485,2.51491 0.12125,2.93106 l 0,0 0,0 c 0.0727,0.39804 0.21822,0.79608 0.43643,1.17604 l 0,0 -1.84276,0 0,0 0,0 c -0.16973,-0.34378 -0.29097,-0.75991 -0.33947,-1.21224 z m -0.14548,-3.69096 0,0 0,0 c -0.63041,0.23521 -1.57605,0.45233 -2.83689,0.61517 l 0,0 0,0 c -0.7274,0.10858 -1.2366,0.21711 -1.52757,0.34377 l 0,0 0,0 c -0.31521,0.10857 -0.53343,0.28947 -0.70314,0.52469 l 0,0 0,0 c -0.16974,0.23521 -0.24249,0.50661 -0.24249,0.79608 l 0,0 0,0 c 0,0.43424 0.16974,0.81419 0.53344,1.10368 l 0,0 0,0 c 0.33946,0.28948 0.87289,0.43423 1.55181,0.43423 l 0,0 0,0 c 0.67891,0 1.28508,-0.14475 1.79428,-0.41614 l 0,0 0,0 c 0.50918,-0.2714 0.89713,-0.65135 1.13961,-1.13986 l 0,0 0,0 c 0.19397,-0.37995 0.29095,-0.92273 0.29095,-1.66455 l 0,-0.59707 z" /> 2.314 - <path 2.315 - inkscape:connector-curvature="0" 2.316 - id="502" 2.317 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.318 - d="m 271.79421,408.42327 0,0 0,-9.7521 1.55181,0 0,1.46552 0,0 0,0 c 0.4122,-0.70563 0.77592,-1.13985 1.11537,-1.35696 l 0,0 0,0 c 0.33946,-0.21713 0.72739,-0.32568 1.13961,-0.32568 l 0,0 0,0 c 0.58192,0 1.1881,0.18093 1.79426,0.5247 l 0,0 -0.60616,1.5198 0,0 0,0 c -0.43645,-0.23521 -0.84865,-0.36186 -1.2851,-0.36186 l 0,0 0,0 c -0.38795,0 -0.7274,0.10857 -1.04261,0.32567 l 0,0 0,0 c -0.29097,0.21713 -0.50919,0.5247 -0.65467,0.90465 l 0,0 0,0 c -0.19398,0.59707 -0.29096,1.23033 -0.29096,1.93595 l 0,0 0,5.12031 -1.72155,0 z" /> 2.319 - <path 2.320 - inkscape:connector-curvature="0" 2.321 - id="503" 2.322 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.323 - d="m 285.46951,405.27509 0,0 1.81853,0.21711 0,0 0,0 c -0.29097,0.99512 -0.8244,1.77312 -1.57605,2.31591 l 0,0 0,0 c -0.77591,0.56087 -1.72154,0.83227 -2.93389,0.83227 l 0,0 0,0 c -1.50331,0 -2.71566,-0.43423 -3.58856,-1.32079 l 0,0 0,0 c -0.89713,-0.88655 -1.30933,-2.11687 -1.30933,-3.70904 l 0,0 0,0 c 0,-1.62838 0.4122,-2.91297 1.30933,-3.81763 l 0,0 0,0 c 0.89715,-0.88655 2.061,-1.33887 3.49156,-1.33887 l 0,0 0,0 c 1.38208,0 2.47321,0.43423 3.34609,1.30269 l 0,0 0,0 c 0.8729,0.90464 1.30935,2.15307 1.30935,3.76333 l 0,0 0,0 c 0,0.0905 0,0.23521 0,0.43423 l 0,0 -7.66205,0 0,0 0,0 c 0.0485,1.06749 0.3637,1.89977 0.94561,2.46065 l 0,0 0,0 c 0.58194,0.57897 1.30935,0.86846 2.18225,0.86846 l 0,0 0,0 c 0.63041,0 1.1881,-0.16284 1.62455,-0.48851 l 0,0 0,0 c 0.41219,-0.30758 0.77589,-0.83228 1.04261,-1.51981 z m -5.69804,-2.67775 0,0 5.72229,0 0,0 0,0 c -0.0727,-0.81419 -0.29097,-1.44745 -0.65467,-1.84549 l 0,0 0,0 c -0.53343,-0.63325 -1.23659,-0.95893 -2.13374,-0.95893 l 0,0 0,0 c -0.80015,0 -1.47906,0.25331 -2.03675,0.75991 l 0,0 0,0 c -0.53343,0.50661 -0.84863,1.19414 -0.89713,2.04451 z" /> 2.324 - <path 2.325 - inkscape:connector-curvature="0" 2.326 - id="504" 2.327 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.328 - d="m 294.61062,404.08095 0,0 1.74578,-0.14474 0,0 0,0 c 0.097,0.66944 0.29097,1.23033 0.58193,1.66455 l 0,0 0,0 c 0.31522,0.43424 0.80015,0.77801 1.45483,1.04939 l 0,0 0,0 c 0.65467,0.2714 1.38206,0.39804 2.18221,0.39804 l 0,0 0,0 c 0.72742,0 1.35783,-0.10857 1.89128,-0.30757 l 0,0 0,0 c 0.55768,-0.19902 0.96987,-0.47042 1.2366,-0.83227 l 0,0 0,0 c 0.26671,-0.34377 0.41218,-0.74181 0.41218,-1.15796 l 0,0 0,0 c 0,-0.41613 -0.14547,-0.77799 -0.38795,-1.10366 l 0,0 0,0 c -0.26671,-0.30758 -0.70315,-0.57898 -1.28508,-0.7961 l 0,0 0,0 c -0.38796,-0.14474 -1.21235,-0.36185 -2.52169,-0.65135 l 0,0 0,0 c -1.33358,-0.30756 -2.25496,-0.57896 -2.76416,-0.85036 l 0,0 0,0 c -0.67892,-0.32567 -1.16385,-0.74181 -1.5033,-1.24842 l 0,0 0,0 c -0.33946,-0.5066 -0.5092,-1.04939 -0.5092,-1.66455 l 0,0 0,0 c 0,-0.66943 0.21824,-1.32078 0.60618,-1.89976 l 0,0 0,0 c 0.38795,-0.59706 0.99413,-1.04939 1.77003,-1.35696 l 0,0 0,0 c 0.80015,-0.30758 1.67305,-0.45233 2.64291,-0.45233 l 0,0 0,0 c 1.04263,0 1.96402,0.16284 2.76416,0.48851 l 0,0 0,0 c 0.8244,0.30759 1.43058,0.79608 1.86702,1.41125 l 0,0 0,0 c 0.43646,0.63326 0.67891,1.33888 0.70316,2.11687 l 0,0 -1.81851,0.14475 0,0 0,0 c -0.097,-0.85037 -0.4122,-1.50172 -0.96988,-1.93594 l 0,0 0,0 c -0.58193,-0.43424 -1.38208,-0.65135 -2.4732,-0.65135 l 0,0 0,0 c -1.13961,0 -1.98824,0.19902 -2.49744,0.59707 l 0,0 0,0 c -0.53343,0.37995 -0.80015,0.86846 -0.80015,1.42934 l 0,0 0,0 c 0,0.47042 0.19398,0.86846 0.55768,1.17604 l 0,0 0,0 c 0.3637,0.30757 1.30933,0.63325 2.86115,0.95892 l 0,0 0,0 c 1.52756,0.32568 2.57017,0.61517 3.12786,0.85037 l 0,0 0,0 c 0.84864,0.36186 1.45481,0.83228 1.84277,1.37507 l 0,0 0,0 c 0.4122,0.56087 0.60617,1.19413 0.60617,1.91785 l 0,0 0,0 c 0,0.72373 -0.21822,1.39315 -0.65467,2.02641 l 0,0 0,0 c -0.43644,0.63326 -1.06686,1.13986 -1.86702,1.48363 l 0,0 0,0 c -0.82439,0.36186 -1.72153,0.52469 -2.7399,0.52469 l 0,0 0,0 c -1.28509,0 -2.37621,-0.16283 -3.24909,-0.52469 l 0,0 0,0 c -0.8729,-0.36186 -1.55181,-0.88655 -2.03675,-1.61028 l 0,0 0,0 c -0.50919,-0.70563 -0.75166,-1.5198 -0.77591,-2.42446 z" /> 2.329 - <path 2.330 - inkscape:connector-curvature="0" 2.331 - id="505" 2.332 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.333 - d="m 312.11694,406.93964 0,0 0.26672,1.46553 0,0 0,0 c -0.50918,0.0904 -0.94563,0.14474 -1.3336,0.14474 l 0,0 0,0 c -0.63041,0 -1.13959,-0.0905 -1.47906,-0.28948 l 0,0 0,0 c -0.3637,-0.18094 -0.60616,-0.43423 -0.75165,-0.74182 l 0,0 0,0 c -0.14548,-0.32567 -0.21821,-0.97701 -0.21821,-1.95403 l 0,0 0,-5.62691 -1.26085,0 0,-1.2665 1.26085,0 0,-2.42446 1.74577,-0.99511 0,3.41957 1.77003,0 0,1.2665 -1.77003,0 0,5.71737 0,0 0,0 c 0,0.47042 0.0485,0.778 0.097,0.90466 l 0,0 0,0 c 0.0728,0.12669 0.16973,0.2352 0.31521,0.32567 l 0,0 0,0 c 0.12124,0.0723 0.33945,0.10858 0.58194,0.10858 l 0,0 0,0 c 0.19396,0 0.46068,-0.0181 0.77589,-0.0542 z" /> 2.334 - <path 2.335 - inkscape:connector-curvature="0" 2.336 - id="506" 2.337 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.338 - d="m 320.53064,407.21103 0,0 0,0 c -0.63042,0.5247 -1.2366,0.88657 -1.84278,1.10368 l 0,0 0,0 c -0.60616,0.21711 -1.26083,0.32567 -1.93974,0.32567 l 0,0 0,0 c -1.1396,0 -2.0125,-0.2714 -2.61868,-0.79609 l 0,0 0,0 c -0.58192,-0.5247 -0.89713,-1.19414 -0.89713,-2.00832 l 0,0 0,0 c 0,-0.47041 0.12123,-0.90465 0.33945,-1.30269 l 0,0 0,0 c 0.24246,-0.39804 0.5092,-0.70562 0.89713,-0.95893 l 0,0 0,0 c 0.36371,-0.2352 0.77591,-0.41613 1.26085,-0.54279 l 0,0 0,0 c 0.33946,-0.0723 0.84864,-0.16283 1.55181,-0.2352 l 0,0 0,0 c 1.43056,-0.16284 2.47319,-0.36186 3.10361,-0.57898 l 0,0 0,0 c 0,-0.21712 0.0242,-0.36186 0.0242,-0.43423 l 0,0 0,0 c 0,-0.66944 -0.16974,-1.13986 -0.50919,-1.42934 l 0,0 0,0 c -0.41219,-0.36185 -1.09111,-0.56089 -1.96401,-0.56089 l 0,0 0,0 c -0.82439,0 -1.45481,0.14475 -1.84276,0.41615 l 0,0 0,0 c -0.38795,0.27138 -0.67891,0.7599 -0.8729,1.44743 l 0,0 -1.69728,-0.21711 0,0 0,0 c 0.16972,-0.68754 0.41219,-1.24841 0.75165,-1.68265 l 0,0 0,0 c 0.3637,-0.39804 0.87288,-0.74181 1.55181,-0.95892 l 0,0 0,0 c 0.67892,-0.23522 1.45482,-0.34377 2.35195,-0.34377 l 0,0 0,0 c 0.89715,0 1.60031,0.0905 2.13374,0.28948 l 0,0 0,0 c 0.55769,0.19904 0.96988,0.43424 1.21235,0.72372 l 0,0 0,0 c 0.26672,0.28949 0.46068,0.66944 0.55768,1.12177 l 0,0 0,0 c 0.0485,0.28949 0.0727,0.79609 0.0727,1.5379 l 0,0 0,2.18925 0,0 0,0 c 0,1.55599 0.0485,2.51491 0.12123,2.93106 l 0,0 0,0 c 0.0728,0.39804 0.21823,0.79608 0.43645,1.17604 l 0,0 -1.81853,0 0,0 0,0 c -0.19397,-0.34378 -0.3152,-0.75991 -0.3637,-1.21224 z m -0.14548,-3.69096 0,0 0,0 c -0.60617,0.23521 -1.5518,0.45233 -2.8369,0.61517 l 0,0 0,0 c -0.72741,0.10858 -1.23659,0.21711 -1.52756,0.34377 l 0,0 0,0 c -0.3152,0.10857 -0.53343,0.28947 -0.70316,0.52469 l 0,0 0,0 c -0.14549,0.23521 -0.24247,0.50661 -0.24247,0.79608 l 0,0 0,0 c 0,0.43424 0.19398,0.81419 0.53345,1.10368 l 0,0 0,0 c 0.36368,0.28948 0.87288,0.43423 1.55179,0.43423 l 0,0 0,0 c 0.67892,0 1.2851,-0.14475 1.81853,-0.41614 l 0,0 0,0 c 0.50919,-0.2714 0.89713,-0.65135 1.1396,-1.13986 l 0,0 0,0 c 0.16973,-0.37995 0.26672,-0.92273 0.26672,-1.66455 l 0,-0.59707 z" /> 2.339 - <path 2.340 - inkscape:connector-curvature="0" 2.341 - id="507" 2.342 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.343 - d="m 331.61151,404.84086 0,0 1.69728,0.21712 0,0 0,0 c -0.19396,1.12175 -0.67891,1.99021 -1.45481,2.62347 l 0,0 0,0 c -0.75167,0.63326 -1.69728,0.95893 -2.83689,0.95893 l 0,0 0,0 c -1.40633,0 -2.54593,-0.43423 -3.39458,-1.32079 l 0,0 0,0 c -0.84865,-0.86846 -1.2851,-2.11687 -1.2851,-3.74524 l 0,0 0,0 c 0,-1.04939 0.19399,-1.97213 0.55769,-2.76822 l 0,0 0,0 c 0.36371,-0.79608 0.92138,-1.39316 1.67304,-1.77311 l 0,0 0,0 c 0.75167,-0.37995 1.57605,-0.57897 2.4732,-0.57897 l 0,0 0,0 c 1.11536,0 2.03674,0.27139 2.73991,0.79609 l 0,0 0,0 c 0.70314,0.52469 1.16384,1.2846 1.35783,2.26161 l 0,0 -1.67305,0.25331 0,0 0,0 c -0.16973,-0.65135 -0.4607,-1.13986 -0.8729,-1.48363 l 0,0 0,0 c -0.41218,-0.32567 -0.89713,-0.48851 -1.50331,-0.48851 l 0,0 0,0 c -0.87288,0 -1.6003,0.28949 -2.13373,0.88657 l 0,0 0,0 c -0.55768,0.61515 -0.84865,1.55599 -0.84865,2.84058 l 0,0 0,0 c 0,1.32079 0.26672,2.26162 0.80015,2.8587 l 0,0 0,0 c 0.53345,0.59706 1.2366,0.90464 2.08525,0.90464 l 0,0 0,0 c 0.70316,0 1.28509,-0.19902 1.74579,-0.59707 l 0,0 0,0 c 0.46068,-0.39804 0.75165,-1.0132 0.87288,-1.84548 z" /> 2.344 - <path 2.345 - inkscape:connector-curvature="0" 2.346 - id="508" 2.347 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.348 - d="m 334.81212,408.42327 0,-13.46117 1.77001,0 0,7.65333 4.12199,-3.94426 2.27921,0 -3.97649,3.60049 4.36446,6.15161 -2.15798,0 -3.39457,-4.99365 -1.23662,1.12175 0,3.8719 -1.77001,0 z" /> 2.349 - <path 2.350 - inkscape:connector-curvature="0" 2.351 - id="509" 2.352 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.353 - d="m 350.69388,408.42327 0,0 0,-8.4856 -1.52756,0 0,-1.2665 1.52756,0 0,-1.04939 0,0 0,0 c 0,-0.65135 0.0485,-1.13987 0.16974,-1.44745 l 0,0 0,0 c 0.16973,-0.43422 0.46068,-0.77799 0.89713,-1.04939 l 0,0 0,0 c 0.43645,-0.27138 1.01838,-0.39804 1.79428,-0.39804 l 0,0 0,0 c 0.48493,0 1.04261,0.0542 1.62454,0.16284 l 0,0 -0.24246,1.44743 0,0 0,0 c -0.38795,-0.0723 -0.72742,-0.0905 -1.04264,-0.0905 l 0,0 0,0 c -0.53343,0 -0.92136,0.10858 -1.13959,0.32568 l 0,0 0,0 c -0.21824,0.19902 -0.31522,0.61515 -0.31522,1.19413 l 0,0 0,0.90465 2.01251,0 0,1.2665 -2.01251,0 0,8.4856 -1.74578,0 z" /> 2.354 - <path 2.355 - inkscape:connector-curvature="0" 2.356 - id="510" 2.357 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.358 - d="m 355.15532,403.53817 0,0 0,0 c 0,-1.80929 0.53345,-3.14817 1.57607,-4.01663 l 0,0 0,0 c 0.87288,-0.70563 1.964,-1.06749 3.24908,-1.06749 l 0,0 0,0 c 1.43058,0 2.54594,0.43423 3.44308,1.30269 l 0,0 0,0 c 0.89714,0.86846 1.35783,2.08069 1.35783,3.63668 l 0,0 0,0 c 0,1.26652 -0.19398,2.24353 -0.60617,2.96725 l 0,0 0,0 c -0.38796,0.72372 -0.96989,1.2846 -1.74579,1.68264 l 0,0 0,0 c -0.72741,0.39805 -1.55181,0.59707 -2.44895,0.59707 l 0,0 0,0 c -1.45481,0 -2.61867,-0.43423 -3.51581,-1.32079 l 0,0 0,0 c -0.87289,-0.86846 -1.30934,-2.13496 -1.30934,-3.78142 z m 1.77003,0 0,0 0,0 c 0,1.24841 0.29097,2.18925 0.8729,2.8044 l 0,0 0,0 c 0.58193,0.61517 1.30934,0.94084 2.18222,0.94084 l 0,0 0,0 c 0.87289,0 1.60031,-0.32567 2.13374,-0.94084 l 0,0 0,0 c 0.58192,-0.63324 0.87289,-1.57409 0.87289,-2.85868 l 0,0 0,0 c 0,-1.21223 -0.29097,-2.13497 -0.87289,-2.75013 l 0,0 0,0 c -0.53343,-0.61516 -1.26085,-0.94084 -2.13374,-0.94084 l 0,0 0,0 c -0.87288,0 -1.60029,0.32568 -2.18222,0.94084 l 0,0 0,0 c -0.58193,0.61516 -0.8729,1.556 -0.8729,2.80441 z" /> 2.359 - <path 2.360 - inkscape:connector-curvature="0" 2.361 - id="511" 2.362 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.363 - d="m 366.81812,408.42327 0,0 0,-9.7521 1.57606,0 0,1.46552 0,0 0,0 c 0.38795,-0.70563 0.7759,-1.13985 1.11536,-1.35696 l 0,0 0,0 c 0.33945,-0.21713 0.70316,-0.32568 1.11536,-0.32568 l 0,0 0,0 c 0.58192,0 1.1881,0.18093 1.79427,0.5247 l 0,0 -0.58192,1.5198 0,0 0,0 c -0.43645,-0.23521 -0.87289,-0.36186 -1.30934,-0.36186 l 0,0 0,0 c -0.3637,0 -0.7274,0.10857 -1.01837,0.32567 l 0,0 0,0 c -0.31521,0.21713 -0.53344,0.5247 -0.65467,0.90465 l 0,0 0,0 c -0.19398,0.59707 -0.29096,1.23033 -0.29096,1.93595 l 0,0 0,5.12031 -1.74579,0 z" /> 2.364 - <path 2.365 - inkscape:connector-curvature="0" 2.366 - id="512" 2.367 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.368 - d="m 379.23258,408.42327 0,0 0,-13.46117 5.35858,0 0,0 0,0 c 0.96988,0 1.67304,0.0362 2.15798,0.1267 l 0,0 0,0 c 0.70316,0.10858 1.28509,0.30758 1.77002,0.63326 l 0,0 0,0 c 0.48495,0.30757 0.84865,0.7418 1.13962,1.28459 l 0,0 0,0 c 0.29096,0.56088 0.43644,1.17604 0.43644,1.84549 l 0,0 0,0 c 0,1.12175 -0.38795,2.09878 -1.16385,2.89487 l 0,0 0,0 c -0.7759,0.79608 -2.15798,1.19414 -4.17048,1.19414 l 0,0 -3.6613,0 0,5.48216 -1.86701,0 z m 1.86701,-7.07435 0,0 3.70979,0 0,0 0,0 c 1.1881,0 2.06099,-0.21712 2.57018,-0.65134 l 0,0 0,0 c 0.50919,-0.41615 0.77591,-1.0313 0.77591,-1.79121 l 0,0 0,0 c 0,-0.56088 -0.16973,-1.04939 -0.4607,-1.44743 l 0,0 0,0 c -0.29096,-0.39804 -0.70316,-0.66944 -1.1881,-0.7961 l 0,0 0,0 c -0.31521,-0.0723 -0.92138,-0.10857 -1.74578,-0.10857 l 0,0 -3.6613,0 0,4.79462 z" /> 2.369 - <path 2.370 - inkscape:connector-curvature="0" 2.371 - id="513" 2.372 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.373 - d="m 399.33332,405.27509 0,0 1.79428,0.21711 0,0 0,0 c -0.29097,0.99512 -0.7759,1.77312 -1.55181,2.31591 l 0,0 0,0 c -0.7759,0.56087 -1.77003,0.83227 -2.95813,0.83227 l 0,0 0,0 c -1.50331,0 -2.71566,-0.43423 -3.58855,-1.32079 l 0,0 0,0 c -0.89714,-0.88655 -1.33358,-2.11687 -1.33358,-3.70904 l 0,0 0,0 c 0,-1.62838 0.43644,-2.91297 1.33358,-3.81763 l 0,0 0,0 c 0.89714,-0.88655 2.06099,-1.33887 3.49156,-1.33887 l 0,0 0,0 c 1.38208,0 2.49744,0.43423 3.37034,1.30269 l 0,0 0,0 c 0.87288,0.90464 1.30933,2.15307 1.30933,3.76333 l 0,0 0,0 c 0,0.0905 0,0.23521 -0.0242,0.43423 l 0,0 -7.66204,0 0,0 0,0 c 0.0485,1.06749 0.38795,1.89977 0.96987,2.46065 l 0,0 0,0 c 0.55769,0.57897 1.2851,0.86846 2.15799,0.86846 l 0,0 0,0 c 0.63042,0 1.16385,-0.16284 1.62454,-0.48851 l 0,0 0,0 c 0.46069,-0.30758 0.80015,-0.83228 1.06687,-1.51981 z m -5.72228,-2.67775 0,0 5.74653,0 0,0 0,0 c -0.0727,-0.81419 -0.29097,-1.44745 -0.65467,-1.84549 l 0,0 0,0 c -0.55768,-0.63325 -1.26084,-0.95893 -2.15798,-0.95893 l 0,0 0,0 c -0.80015,0 -1.47907,0.25331 -2.03675,0.75991 l 0,0 0,0 c -0.53343,0.50661 -0.84864,1.19414 -0.89713,2.04451 z" /> 2.374 - <path 2.375 - inkscape:connector-curvature="0" 2.376 - id="514" 2.377 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.378 - d="m 403.33407,408.42327 0,0 0,-9.7521 1.55181,0 0,1.46552 0,0 0,0 c 0.4122,-0.70563 0.77591,-1.13985 1.11536,-1.35696 l 0,0 0,0 c 0.33946,-0.21713 0.72741,-0.32568 1.11536,-0.32568 l 0,0 0,0 c 0.60617,0 1.21235,0.18093 1.81852,0.5247 l 0,0 -0.60617,1.5198 0,0 0,0 c -0.43645,-0.23521 -0.87289,-0.36186 -1.28509,-0.36186 l 0,0 0,0 c -0.38795,0 -0.72741,0.10857 -1.04262,0.32567 l 0,0 0,0 c -0.29097,0.21713 -0.50918,0.5247 -0.65467,0.90465 l 0,0 0,0 c -0.19397,0.59707 -0.29096,1.23033 -0.29096,1.93595 l 0,0 0,5.12031 -1.72154,0 z" /> 2.379 - <path 2.380 - inkscape:connector-curvature="0" 2.381 - id="515" 2.382 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.383 - d="m 410.38995,408.42327 0,0 0,-8.4856 -1.52756,0 0,-1.2665 1.52756,0 0,-1.04939 0,0 0,0 c 0,-0.65135 0.0727,-1.13987 0.19397,-1.44745 l 0,0 0,0 c 0.16973,-0.43422 0.46069,-0.77799 0.87289,-1.04939 l 0,0 0,0 c 0.43645,-0.27138 1.04262,-0.39804 1.79428,-0.39804 l 0,0 0,0 c 0.50918,0 1.04262,0.0542 1.64879,0.16284 l 0,0 -0.26671,1.44743 0,0 0,0 c -0.36371,-0.0723 -0.70317,-0.0905 -1.04263,-0.0905 l 0,0 0,0 c -0.53343,0 -0.89713,0.10858 -1.11535,0.32568 l 0,0 0,0 c -0.21823,0.19902 -0.33946,0.61515 -0.33946,1.19413 l 0,0 0,0.90465 2.0125,0 0,1.2665 -2.0125,0 0,8.4856 -1.74578,0 z" /> 2.384 - <path 2.385 - inkscape:connector-curvature="0" 2.386 - id="516" 2.387 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.388 - d="m 414.85139,403.53817 0,0 0,0 c 0,-1.80929 0.53343,-3.14817 1.57605,-4.01663 l 0,0 0,0 c 0.89714,-0.70563 1.98826,-1.06749 3.24909,-1.06749 l 0,0 0,0 c 1.43058,0 2.57019,0.43423 3.46733,1.30269 l 0,0 0,0 c 0.92138,0.86846 1.35783,2.08069 1.35783,3.63668 l 0,0 0,0 c 0,1.26652 -0.19398,2.24353 -0.58193,2.96725 l 0,0 0,0 c -0.4122,0.72372 -0.99413,1.2846 -1.74579,1.68264 l 0,0 0,0 c -0.75165,0.39805 -1.57605,0.59707 -2.49744,0.59707 l 0,0 0,0 c -1.43056,0 -2.61866,-0.43423 -3.5158,-1.32079 l 0,0 0,0 c -0.84865,-0.86846 -1.30934,-2.13496 -1.30934,-3.78142 z m 1.79427,0 0,0 0,0 c 0,1.24841 0.29096,2.18925 0.84865,2.8044 l 0,0 0,0 c 0.58193,0.61517 1.30933,0.94084 2.18222,0.94084 l 0,0 0,0 c 0.8729,0 1.60031,-0.32567 2.15798,-0.94084 l 0,0 0,0 c 0.58193,-0.63324 0.8729,-1.57409 0.8729,-2.85868 l 0,0 0,0 c 0,-1.21223 -0.29097,-2.13497 -0.8729,-2.75013 l 0,0 0,0 c -0.55767,-0.61516 -1.28508,-0.94084 -2.15798,-0.94084 l 0,0 0,0 c -0.87289,0 -1.60029,0.32568 -2.18222,0.94084 l 0,0 0,0 c -0.55769,0.61516 -0.84865,1.556 -0.84865,2.80441 z" /> 2.389 - <path 2.390 - inkscape:connector-curvature="0" 2.391 - id="517" 2.392 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.393 - d="m 426.56268,408.42327 0,0 0,-9.7521 1.5518,0 0,1.46552 0,0 0,0 c 0.4122,-0.70563 0.77591,-1.13985 1.11537,-1.35696 l 0,0 0,0 c 0.33945,-0.21713 0.72741,-0.32568 1.1396,-0.32568 l 0,0 0,0 c 0.58193,0 1.1881,0.18093 1.79428,0.5247 l 0,0 -0.60618,1.5198 0,0 0,0 c -0.43644,-0.23521 -0.84864,-0.36186 -1.28508,-0.36186 l 0,0 0,0 c -0.38796,0 -0.72741,0.10857 -1.04262,0.32567 l 0,0 0,0 c -0.29096,0.21713 -0.50919,0.5247 -0.65467,0.90465 l 0,0 0,0 c -0.19398,0.59707 -0.29097,1.23033 -0.29097,1.93595 l 0,0 0,5.12031 -1.72153,0 z" /> 2.394 - <path 2.395 - inkscape:connector-curvature="0" 2.396 - id="518" 2.397 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.398 - d="m 433.23059,408.42327 0,0 0,-9.7521 1.55181,0 0,1.35697 0,0 0,0 c 0.31521,-0.48851 0.75166,-0.85037 1.2851,-1.13986 l 0,0 0,0 c 0.53343,-0.28949 1.16385,-0.43423 1.84276,-0.43423 l 0,0 0,0 c 0.7759,0 1.38208,0.14474 1.84277,0.45232 l 0,0 0,0 c 0.48494,0.28949 0.8244,0.68753 1.04263,1.23032 l 0,0 0,0 c 0.80014,-1.12176 1.86701,-1.68264 3.20059,-1.68264 l 0,0 0,0 c 1.01838,0 1.79428,0.27139 2.32771,0.79609 l 0,0 0,0 c 0.55769,0.52469 0.84865,1.33888 0.84865,2.46063 l 0,0 0,6.7125 -1.74578,0 0,-6.15161 0,0 0,0 c 0,-0.66944 -0.0727,-1.13986 -0.14549,-1.42933 l 0,0 0,0 c -0.12123,-0.2895 -0.33946,-0.52471 -0.63042,-0.70564 l 0,0 0,0 c -0.29096,-0.18093 -0.65467,-0.27139 -1.04262,-0.27139 l 0,0 0,0 c -0.7274,0 -1.33358,0.2352 -1.81852,0.68753 l 0,0 0,0 c -0.48494,0.45232 -0.72741,1.19414 -0.72741,2.18925 l 0,0 0,5.68119 -1.72154,0 0,-6.35063 0,0 0,0 c 0,-0.74182 -0.14548,-1.2846 -0.41219,-1.66455 l 0,0 0,0 c -0.29096,-0.36186 -0.75166,-0.54279 -1.40633,-0.54279 l 0,0 0,0 c -0.48494,0 -0.94563,0.1267 -1.38208,0.36186 l 0,0 0,0 c -0.41219,0.25329 -0.70316,0.61517 -0.89713,1.08557 l 0,0 0,0 c -0.19398,0.47042 -0.29097,1.13986 -0.29097,2.04451 l 0,0 0,5.06603 -1.72154,0 z" /> 2.399 - <path 2.400 - inkscape:connector-curvature="0" 2.401 - id="519" 2.402 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.403 - d="m 456.50769,407.21103 0,0 0,0 c -0.63042,0.5247 -1.26083,0.88657 -1.86701,1.10368 l 0,0 0,0 c -0.60617,0.21711 -1.23659,0.32567 -1.93976,0.32567 l 0,0 0,0 c -1.13961,0 -1.98826,-0.2714 -2.59443,-0.79609 l 0,0 0,0 c -0.60617,-0.5247 -0.92139,-1.19414 -0.92139,-2.00832 l 0,0 0,0 c 0,-0.47041 0.12125,-0.90465 0.33946,-1.30269 l 0,0 0,0 c 0.24248,-0.39804 0.53344,-0.70562 0.92139,-0.95893 l 0,0 0,0 c 0.36371,-0.2352 0.80015,-0.41613 1.2366,-0.54279 l 0,0 0,0 c 0.33946,-0.0723 0.87289,-0.16283 1.55181,-0.2352 l 0,0 0,0 c 1.43056,-0.16284 2.47318,-0.36186 3.12785,-0.57898 l 0,0 0,0 c 0.0242,-0.21712 0.0242,-0.36186 0.0242,-0.43423 l 0,0 0,0 c 0,-0.66944 -0.16973,-1.13986 -0.50919,-1.42934 l 0,0 0,0 c -0.43644,-0.36185 -1.11535,-0.56089 -1.98825,-0.56089 l 0,0 0,0 c -0.82439,0 -1.43057,0.14475 -1.84276,0.41615 l 0,0 0,0 c -0.38796,0.27138 -0.67892,0.7599 -0.84865,1.44743 l 0,0 -1.69729,-0.21711 0,0 0,0 c 0.14548,-0.68754 0.4122,-1.24841 0.75165,-1.68265 l 0,0 0,0 c 0.36371,-0.39804 0.89714,-0.74181 1.52756,-0.95892 l 0,0 0,0 c 0.67892,-0.23522 1.47908,-0.34377 2.35196,-0.34377 l 0,0 0,0 c 0.89714,0 1.6003,0.0905 2.15799,0.28948 l 0,0 0,0 c 0.55767,0.19904 0.96987,0.43424 1.21235,0.72372 l 0,0 0,0 c 0.24246,0.28949 0.43644,0.66944 0.53342,1.12177 l 0,0 0,0 c 0.0485,0.28949 0.097,0.79609 0.097,1.5379 l 0,0 0,2.18925 0,0 0,0 c 0,1.55599 0.0242,2.51491 0.097,2.93106 l 0,0 0,0 c 0.0727,0.39804 0.21822,0.79608 0.4607,1.17604 l 0,0 -1.81853,0 0,0 0,0 c -0.19398,-0.34378 -0.29096,-0.75991 -0.36371,-1.21224 z m -0.14548,-3.69096 0,0 0,0 c -0.63042,0.23521 -1.57605,0.45233 -2.86114,0.61517 l 0,0 0,0 c -0.72741,0.10858 -1.2366,0.21711 -1.52756,0.34377 l 0,0 0,0 c -0.29096,0.10857 -0.53344,0.28947 -0.67891,0.52469 l 0,0 0,0 c -0.14549,0.23521 -0.24248,0.50661 -0.24248,0.79608 l 0,0 0,0 c 0,0.43424 0.19398,0.81419 0.50919,1.10368 l 0,0 0,0 c 0.3637,0.28948 0.87289,0.43423 1.57605,0.43423 l 0,0 0,0 c 0.65467,0 1.26085,-0.14475 1.79428,-0.41614 l 0,0 0,0 c 0.53344,-0.2714 0.92139,-0.65135 1.16386,-1.13986 l 0,0 0,0 c 0.19398,-0.37995 0.26671,-0.92273 0.26671,-1.66455 l 0,-0.59707 z" /> 2.404 - <path 2.405 - inkscape:connector-curvature="0" 2.406 - id="520" 2.407 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.408 - d="m 460.84791,408.42327 0,0 0,-9.7521 1.57605,0 0,1.37506 0,0 0,0 c 0.7759,-1.06748 1.84277,-1.59218 3.27334,-1.59218 l 0,0 0,0 c 0.63042,0 1.21235,0.10858 1.72153,0.30757 l 0,0 0,0 c 0.53344,0.21713 0.92139,0.48852 1.18811,0.81419 l 0,0 0,0 c 0.26672,0.34377 0.43645,0.75991 0.53343,1.23032 l 0,0 0,0 c 0.0727,0.30758 0.0727,0.83228 0.0727,1.61028 l 0,0 0,6.00686 -1.72154,0 0,-5.95259 0,0 0,0 c 0,-0.66944 -0.0727,-1.17604 -0.19398,-1.50171 l 0,0 0,0 c -0.14548,-0.34377 -0.38795,-0.59707 -0.72741,-0.79609 l 0,0 0,0 c -0.36371,-0.19903 -0.7759,-0.30758 -1.2366,-0.30758 l 0,0 0,0 c -0.75165,0 -1.38207,0.21711 -1.93975,0.66944 l 0,0 0,0 c -0.50919,0.45232 -0.77591,1.30269 -0.77591,2.55111 l 0,0 0,5.33742 -1.77002,0 z" /> 2.409 - <path 2.410 - inkscape:connector-curvature="0" 2.411 - id="521" 2.412 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.413 - d="m 475.73555,406.93964 0,0 0.24247,1.46553 0,0 0,0 c -0.48494,0.0904 -0.89714,0.14474 -1.28509,0.14474 l 0,0 0,0 c -0.65467,0 -1.13961,-0.0905 -1.50332,-0.28948 l 0,0 0,0 c -0.33945,-0.18094 -0.58192,-0.43423 -0.72741,-0.74182 l 0,0 0,0 c -0.14548,-0.32567 -0.21821,-0.97701 -0.21821,-1.95403 l 0,0 0,-5.62691 -1.2851,0 0,-1.2665 1.2851,0 0,-2.42446 1.74578,-0.99511 0,3.41957 1.74578,0 0,1.2665 -1.74578,0 0,5.71737 0,0 0,0 c 0,0.47042 0.0242,0.778 0.097,0.90466 l 0,0 0,0 c 0.0485,0.12669 0.16972,0.2352 0.29096,0.32567 l 0,0 0,0 c 0.14548,0.0723 0.33945,0.10858 0.60618,0.10858 l 0,0 0,0 c 0.19397,0 0.43644,-0.0181 0.75165,-0.0542 z" /> 2.414 - <path 2.415 - inkscape:connector-curvature="0" 2.416 - id="522" 2.417 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.418 - d="m 483.15513,408.42327 0,0 0,-13.46117 5.35858,0 0,0 0,0 c 0.96987,0 1.67304,0.0362 2.18222,0.1267 l 0,0 0,0 c 0.70317,0.10858 1.2851,0.30758 1.77004,0.63326 l 0,0 0,0 c 0.46069,0.30757 0.82439,0.7418 1.11535,1.28459 l 0,0 0,0 c 0.29096,0.56088 0.43645,1.17604 0.43645,1.84549 l 0,0 0,0 c 0,1.12175 -0.38795,2.09878 -1.13961,2.89487 l 0,0 0,0 c -0.7759,0.79608 -2.15798,1.19414 -4.19472,1.19414 l 0,0 -3.63705,0 0,5.48216 -1.89126,0 z m 1.89126,-7.07435 0,0 3.66129,0 0,0 0,0 c 1.2366,0 2.10948,-0.21712 2.61867,-0.65134 l 0,0 0,0 c 0.50919,-0.41615 0.77591,-1.0313 0.77591,-1.79121 l 0,0 0,0 c 0,-0.56088 -0.16973,-1.04939 -0.46069,-1.44743 l 0,0 0,0 c -0.31522,-0.39804 -0.70316,-0.66944 -1.1881,-0.7961 l 0,0 0,0 c -0.33946,-0.0723 -0.92139,-0.10857 -1.77003,-0.10857 l 0,0 -3.63705,0 0,4.79462 z" /> 2.419 - <path 2.420 - inkscape:connector-curvature="0" 2.421 - id="523" 2.422 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.423 - d="m 495.56958,403.53817 0,0 0,0 c 0,-1.80929 0.53343,-3.14817 1.6003,-4.01663 l 0,0 0,0 c 0.89714,-0.70563 1.93976,-1.06749 3.22484,-1.06749 l 0,0 0,0 c 1.43058,0 2.59443,0.43423 3.49157,1.30269 l 0,0 0,0 c 0.92138,0.86846 1.33359,2.08069 1.33359,3.63668 l 0,0 0,0 c 0,1.26652 -0.16973,2.24353 -0.58193,2.96725 l 0,0 0,0 c -0.38796,0.72372 -0.96988,1.2846 -1.74579,1.68264 l 0,0 0,0 c -0.75165,0.39805 -1.57605,0.59707 -2.49744,0.59707 l 0,0 0,0 c -1.43056,0 -2.59442,-0.43423 -3.49156,-1.32079 l 0,0 0,0 c -0.89714,-0.86846 -1.33358,-2.13496 -1.33358,-3.78142 z m 1.79427,0 0,0 0,0 c 0,1.24841 0.29097,2.18925 0.8729,2.8044 l 0,0 0,0 c 0.58192,0.61517 1.28508,0.94084 2.15797,0.94084 l 0,0 0,0 c 0.8729,0 1.60031,-0.32567 2.18223,-0.94084 l 0,0 0,0 c 0.58193,-0.63324 0.87289,-1.57409 0.87289,-2.85868 l 0,0 0,0 c 0,-1.21223 -0.29096,-2.13497 -0.87289,-2.75013 l 0,0 0,0 c -0.58192,-0.61516 -1.30933,-0.94084 -2.18223,-0.94084 l 0,0 0,0 c -0.87289,0 -1.57605,0.32568 -2.15797,0.94084 l 0,0 0,0 c -0.58193,0.61516 -0.8729,1.556 -0.8729,2.80441 z" /> 2.424 - <path 2.425 - inkscape:connector-curvature="0" 2.426 - id="524" 2.427 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.428 - d="m 507.28087,408.42327 0,0 0,-9.7521 1.57605,0 0,1.46552 0,0 0,0 c 0.38795,-0.70563 0.77591,-1.13985 1.11536,-1.35696 l 0,0 0,0 c 0.33946,-0.21713 0.70317,-0.32568 1.09111,-0.32568 l 0,0 0,0 c 0.60618,0 1.21235,0.18093 1.81853,0.5247 l 0,0 -0.60618,1.5198 0,0 0,0 c -0.43644,-0.23521 -0.87289,-0.36186 -1.26083,-0.36186 l 0,0 0,0 c -0.38796,0 -0.72742,0.10857 -1.04263,0.32567 l 0,0 0,0 c -0.3152,0.21713 -0.53343,0.5247 -0.65466,0.90465 l 0,0 0,0 c -0.19398,0.59707 -0.29097,1.23033 -0.29097,1.93595 l 0,0 0,5.12031 -1.74578,0 z" /> 2.429 - <path 2.430 - inkscape:connector-curvature="0" 2.431 - id="525" 2.432 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.433 - d="m 517.73131,406.93964 0,0 0.24248,1.46553 0,0 0,0 c -0.48494,0.0904 -0.94564,0.14474 -1.30934,0.14474 l 0,0 0,0 c -0.60618,0 -1.09111,-0.0905 -1.45482,-0.28948 l 0,0 0,0 c -0.33946,-0.18094 -0.58193,-0.43423 -0.72741,-0.74182 l 0,0 0,0 c -0.14548,-0.32567 -0.21823,-0.97701 -0.21823,-1.95403 l 0,0 0,-5.62691 -1.28508,0 0,-1.2665 1.28508,0 0,-2.42446 1.74579,-0.99511 0,3.41957 1.72153,0 0,1.2665 -1.72153,0 0,5.71737 0,0 0,0 c 0,0.47042 0.0243,0.778 0.0727,0.90466 l 0,0 0,0 c 0.0485,0.12669 0.14548,0.2352 0.29096,0.32567 l 0,0 0,0 c 0.14548,0.0723 0.33946,0.10858 0.60618,0.10858 l 0,0 0,0 c 0.16973,0 0.43645,-0.0181 0.75165,-0.0542 z" /> 2.434 - <path 2.435 - inkscape:connector-curvature="0" 2.436 - id="526" 2.437 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.438 - d="m 526.16926,407.21103 0,0 0,0 c -0.65467,0.5247 -1.28509,0.88657 -1.89126,1.10368 l 0,0 0,0 c -0.58193,0.21711 -1.23659,0.32567 -1.89126,0.32567 l 0,0 0,0 c -1.13962,0 -2.0125,-0.2714 -2.64293,-0.79609 l 0,0 0,0 c -0.60617,-0.5247 -0.89713,-1.19414 -0.89713,-2.00832 l 0,0 0,0 c 0,-0.47041 0.097,-0.90465 0.33946,-1.30269 l 0,0 0,0 c 0.21821,-0.39804 0.53342,-0.70562 0.89713,-0.95893 l 0,0 0,0 c 0.38795,-0.2352 0.80016,-0.41613 1.26085,-0.54279 l 0,0 0,0 c 0.33945,-0.0723 0.87289,-0.16283 1.57605,-0.2352 l 0,0 0,0 c 1.38207,-0.16284 2.42469,-0.36186 3.10361,-0.57898 l 0,0 0,0 c 0,-0.21712 0,-0.36186 0,-0.43423 l 0,0 0,0 c 0,-0.66944 -0.16973,-1.13986 -0.48494,-1.42934 l 0,0 0,0 c -0.46069,-0.36185 -1.11536,-0.56089 -2.0125,-0.56089 l 0,0 0,0 c -0.80014,0 -1.40632,0.14475 -1.79427,0.41615 l 0,0 0,0 c -0.38795,0.27138 -0.67891,0.7599 -0.87289,1.44743 l 0,0 -1.72154,-0.21711 0,0 0,0 c 0.14548,-0.68754 0.4122,-1.24841 0.7759,-1.68265 l 0,0 0,0 c 0.33946,-0.39804 0.87289,-0.74181 1.55181,-0.95892 l 0,0 0,0 c 0.67891,-0.23522 1.45482,-0.34377 2.32771,-0.34377 l 0,0 0,0 c 0.87289,0 1.6003,0.0905 2.15798,0.28948 l 0,0 0,0 c 0.53344,0.19904 0.94563,0.43424 1.21235,0.72372 l 0,0 0,0 c 0.26672,0.28949 0.43645,0.66944 0.53343,1.12177 l 0,0 0,0 c 0.0727,0.28949 0.097,0.79609 0.097,1.5379 l 0,0 0,2.18925 0,0 0,0 c 0,1.55599 0.0242,2.51491 0.12124,2.93106 l 0,0 0,0 c 0.0727,0.39804 0.21822,0.79608 0.43645,1.17604 l 0,0 -1.84278,0 0,0 0,0 c -0.16973,-0.34378 -0.29096,-0.75991 -0.33946,-1.21224 z m -0.14548,-3.69096 0,0 0,0 c -0.65467,0.23521 -1.6003,0.45233 -2.88539,0.61517 l 0,0 0,0 c -0.67892,0.10858 -1.1881,0.21711 -1.50331,0.34377 l 0,0 0,0 c -0.29096,0.10857 -0.53344,0.28947 -0.67892,0.52469 l 0,0 0,0 c -0.16973,0.23521 -0.24246,0.50661 -0.24246,0.79608 l 0,0 0,0 c 0,0.43424 0.16973,0.81419 0.53342,1.10368 l 0,0 0,0 c 0.33946,0.28948 0.8729,0.43423 1.55181,0.43423 l 0,0 0,0 c 0.65467,0 1.2366,-0.14475 1.77003,-0.41614 l 0,0 0,0 c 0.53344,-0.2714 0.92138,-0.65135 1.16386,-1.13986 l 0,0 0,0 c 0.19398,-0.37995 0.29096,-0.92273 0.29096,-1.66455 l 0,-0.59707 z" /> 2.439 - <path 2.440 - inkscape:connector-curvature="0" 2.441 - id="527" 2.442 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.443 - d="m 532.10977,408.42327 0,0 -1.62454,0 0,-13.46117 1.77003,0 0,4.77655 0,0 0,0 c 0.7274,-0.85037 1.67304,-1.2846 2.81264,-1.2846 l 0,0 0,0 c 0.63042,0 1.2366,0.10858 1.79428,0.36186 l 0,0 0,0 c 0.58193,0.2352 1.04262,0.56088 1.40632,0.9951 l 0,0 0,0 c 0.36371,0.43424 0.65467,0.97703 0.8729,1.59219 l 0,0 0,0 c 0.19397,0.61516 0.31521,1.2846 0.31521,1.99022 l 0,0 0,0 c 0,1.66456 -0.46069,2.96725 -1.33359,3.8719 l 0,0 0,0 c -0.87289,0.92273 -1.91551,1.37506 -3.1521,1.37506 l 0,0 0,0 c -1.1881,0 -2.15799,-0.48851 -2.86115,-1.44744 l 0,1.23033 z m 0,-4.95747 0,0 0,0 c 0,1.15794 0.14549,2.00831 0.48495,2.533 l 0,0 0,0 c 0.55767,0.85037 1.30933,1.28461 2.25496,1.28461 l 0,0 0,0 c 0.75166,0 1.40633,-0.32567 1.96401,-0.94084 l 0,0 0,0 c 0.55768,-0.63324 0.84864,-1.57409 0.84864,-2.8225 l 0,0 0,0 c 0,-1.2665 -0.26672,-2.20734 -0.82439,-2.82249 l 0,0 0,0 c -0.53344,-0.59708 -1.16386,-0.90466 -1.93976,-0.90466 l 0,0 0,0 c -0.72742,0 -1.40633,0.30758 -1.96401,0.94084 l 0,0 0,0 c -0.55768,0.63325 -0.8244,1.5379 -0.8244,2.73204 z" /> 2.444 - <path 2.445 - inkscape:connector-curvature="0" 2.446 - id="528" 2.447 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.448 - d="m 541.5661,396.86186 0,-1.89976 1.77002,0 0,1.89976 -1.77002,0 z m 0,11.56141 0,-9.7521 1.77002,0 0,9.7521 -1.77002,0 z" /> 2.449 - <path 2.450 - inkscape:connector-curvature="0" 2.451 - id="529" 2.452 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.453 - d="m 545.97905,408.42327 0,-13.46117 1.72153,0 0,13.46117 -1.72153,0 z" /> 2.454 - <path 2.455 - inkscape:connector-curvature="0" 2.456 - id="530" 2.457 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.458 - d="m 550.44049,396.86186 0,-1.89976 1.77003,0 0,1.89976 -1.77003,0 z m 0,11.56141 0,-9.7521 1.77003,0 0,9.7521 -1.77003,0 z" /> 2.459 - <path 2.460 - inkscape:connector-curvature="0" 2.461 - id="531" 2.462 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.463 - d="m 558.66021,406.93964 0,0 0.24248,1.46553 0,0 0,0 c -0.48494,0.0904 -0.92139,0.14474 -1.30934,0.14474 l 0,0 0,0 c -0.63043,0 -1.13961,-0.0905 -1.47907,-0.28948 l 0,0 0,0 c -0.33946,-0.18094 -0.60617,-0.43423 -0.75165,-0.74182 l 0,0 0,0 c -0.12124,-0.32567 -0.19398,-0.97701 -0.19398,-1.95403 l 0,0 0,-5.62691 -1.28509,0 0,-1.2665 1.28509,0 0,-2.42446 1.74578,-0.99511 0,3.41957 1.74578,0 0,1.2665 -1.74578,0 0,5.71737 0,0 0,0 c 0,0.47042 0.0242,0.778 0.0727,0.90466 l 0,0 0,0 c 0.0728,0.12669 0.16973,0.2352 0.31521,0.32567 l 0,0 0,0 c 0.14548,0.0723 0.33946,0.10858 0.60618,0.10858 l 0,0 0,0 c 0.19398,0 0.43644,-0.0181 0.75165,-0.0542 z" /> 2.464 - <path 2.465 - inkscape:connector-curvature="0" 2.466 - id="532" 2.467 - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" 2.468 - d="m 560.28477,412.1685 0,0 -0.19398,-1.55599 0,0 0,0 c 0.3637,0.0905 0.70316,0.14474 0.99412,0.14474 l 0,0 0,0 c 0.38796,0 0.70317,-0.0723 0.94563,-0.18092 l 0,0 0,0 c 0.21823,-0.1267 0.4122,-0.30759 0.55768,-0.5247 l 0,0 0,0 c 0.12124,-0.16284 0.29096,-0.57897 0.53344,-1.23032 l 0,0 0,0 c 0.0485,-0.0905 0.097,-0.21711 0.16973,-0.37995 l 0,0 -3.92801,-9.77019 1.89126,0 2.15798,5.62691 0,0 0,0 c 0.26672,0.72371 0.53344,1.48361 0.75166,2.26162 l 0,0 0,0 c 0.19398,-0.75992 0.43644,-1.50172 0.67892,-2.20735 l 0,0 2.23072,-5.68118 1.74577,0 -3.928,9.91493 0,0 0,0 c -0.4122,1.0494 -0.72741,1.79121 -0.96988,2.18925 l 0,0 0,0 c -0.31521,0.54278 -0.67892,0.95893 -1.06686,1.21222 l 0,0 0,0 c -0.41221,0.25331 -0.89715,0.37995 -1.45483,0.37995 l 0,0 0,0 c -0.33946,0 -0.70316,-0.0723 -1.11535,-0.19902 z" /> 2.469 <g 2.470 id="g4970" 2.471 transform="translate(0,3.3686829)">
3.1 --- a/0__Papers/VMS/VMS__Foundation_Paper/HotPar_2012/latex/12_Ja_20__HotPar_Abstr_for_PStack.tex Mon Jan 30 15:31:33 2012 -0800 3.2 +++ b/0__Papers/VMS/VMS__Foundation_Paper/HotPar_2012/latex/12_Ja_20__HotPar_Abstr_for_PStack.tex Tue Jan 31 18:03:47 2012 -0800 3.3 @@ -84,9 +84,9 @@ 3.4 %======================================================================= 3.5 3.6 \begin{abstract} 3.7 -The HotPar 2012 call for papers states that wide uptake of high efficiency parallel architectures ``requires new parallel programming paradigms, new methods of application design, new structures for system software, and new models of interaction among applications, compilers, operating systems, and hardware." In short, a new software stack, and a way to organize players in research and industry to supply the pieces of the stack. 3.8 +The HotPar 2012 call for papers states that wide uptake of high efficiency parallel architectures ``requires new parallel programming paradigms, new methods of application design, new structures for system software, and new models of interaction among applications, compilers, operating systems, and hardware." In short, a new software stack, and a way to organize players in research and industry to supply the pieces of the stack. 3.9 3.10 -A recent proposal for a candidate for such a software stack\cite{} relies in part on the assumption that a suitable hardware abstraction exists for the bottom layer of the stack. The abstraction must have certain properties: it must be invisible to upper layers; it must simplify language implementation, in part by hiding details of synchronization and details of communication; and it must at the same time enable high performance, by giving the language control over task placement and exposing memory hierarchy, communication characteristics, and other major performance-related aspects of the hardware. 3.11 +A recent proposal for a candidate for such a software stack\cite{} relies in part on the assumption that a suitable hardware abstraction exists for the bottom layer of the stack. The abstraction's main purpose is to reduce the effort required in the upper layers. It must reduce the effort of creating language runtimes: by hiding details of synchronization and communication; by regularizing implementation to simplify and encourage reuse across languages; and by reducing the number of runtimes needed by collecting multiple targets below a single interface. It must at the same time enable high performance, by giving the language control over task placement and exposing to the runtime the memory hierarchy, communication characteristics, and other major performance-related aspects of the hardware. 3.12 3.13 In this paper, we show that an abstraction called Virtualized Master-Slave, or VMS \cite{} satisfies these criteria, and we provide recent measurements to support the case. 3.14 3.15 @@ -97,55 +97,62 @@ 3.16 \section{Motivation} 3.17 3.18 3.19 -As stated in the call for papers, wide uptake of high efficiency parallel architectures ``requires new parallel programming paradigms, new methods of application design, new structures for system software, and new models of interaction among applications, compilers, operating systems, and hardware." In short, a new software stack, and players in research and industry organized to supply the pieces of the stack. 3.20 +As stated in the call for papers, wide uptake of high efficiency parallel architectures ``requires new parallel programming paradigms, new methods of application design, new structures for system software, and new models of interaction among applications, compilers, operating systems, and hardware." Each of which is an element of the software stack, which is normally supplied by multiple players in research and industry. They need to be organized to supply the pieces of the stack. 3.21 3.22 The goal of the stack is to make parallel programming as productive as sequential programming, and to make it as portable onto new generations of hardware as sequential code. 3.23 3.24 Reduced cost of parallel software is one major benefit of such a stack. Part of the cost reduction comes from performant portability. This means code is written once then run performantly across hardware targets, including unknown future architectures. 3.25 3.26 -A recent proposal for achieving this, named PStack\cite{}, calls for a software stack having a layer of languages (toolchains) at the top, a layer of runtimes below that, and a hardware abstraction layer at the bottom\cite{}. 3.27 +A recent proposal for achieving this, named PStack\cite{}, calls for a software stack having a layer of languages (toolchains) at the top, a layer of runtimes below that, and a hardware abstraction layer at the bottom. 3.28 3.29 -It is this bottom layer that we focus on in this paper. We begin by exploring the requirements for the layers in the stack in Section 2, following up in Section 3 with details, of the layers, that relate to the requirements for the bottom layer, and wrapping up the description in Section 4 of how VMS satisfies the requirements. We then move to results, giving our experimental setup in Section 5, and measurements in Section 6. In Section 7 we tie the elements of the paper together in the conclusion. 3.30 +It is this bottom layer that we focus on in this paper. We begin by giving context for the bottom layer with more information about the software stack, in Section 2. We then explore the requirements for the layers in in Section 3, and show how VMS satisfies the requirements in Section 4. We then move to results, giving our experimental setup in Section 5, and measurements in Section 6. In Section 7 we tie the elements of the paper together in the conclusion. 3.31 3.32 3.33 -\section{Introduction and Background on PStack} 3.34 +%%%%%%%%%%%%%%%%%%%%% 3.35 +\section{Context: PStack} 3.36 3.37 -PStack differentiates itself in three ways: 1) it's goal is wider than most: (nearly) all-languages to (nearly) all hardware 2) It's approach is to \emph{organize} -- industry supplies the pieces of the solution, while PStack itself only provides the interfaces and scaffolding, along with the seed of a solution to start 3) PStack has unique approaches for the application interface and the hardware interface. 3.38 +Many projects are attempting portability \cite{}. PStack differentiates itself in three ways: 1) it's goal is wider than most: (nearly) all-languages to (nearly) all hardware 2) It's approach is to \emph{organize} -- industry supplies the pieces of the solution, while PStack itself only provides the interfaces and scaffolding, along with the seed of a solution to start 3) PStack has unique approaches for the application interface and the hardware interface that fill fundamental needs. 3.39 3.40 The general philosophy is that portability involves too much effort to be solved by a single group. Instead, an industry-wide effort is needed, where each player provides one small piece of the solution. This, though, requires some way to organize it all, and modularize the pieces. 3.41 3.42 PStack addresses this by defining a number of interfaces, and providing tools to manage specialization. These result in a simple, decoupled process for adding new solution pieces. So, the solution can grow at its own pace, accumulating the efforts of many. 3.43 3.44 -At the top, a standard set of information is defined, which must be gathered from the application. Current languages don't capture all the required information. So PStack defines a set of constructs to be added to a language to fill its gaps. 3.45 +\subsection{PStack elements} 3.46 3.47 -In the middle, current runtimes require too much effort to create, and discourage reusing schedulers across languages. So PStack defines a hardware abstraction that removes as much as possible from the runtime, including concurrency in the runtime itself. The abstraction makes the runtimes all have similar structure, which simplifies reuse of complex scheduler code among languages. 3.48 +As seen in Figure \ref{figPStack}, at the top, a standard set of information is defined, which must be gathered from the application. Current languages don't capture all the required information. So PStack defines a set of constructs to be added to a language to fill its gaps. The added constructs are denoted ``+P'' appended to the language name. 3.49 3.50 -At the bottom, performance of the runtime itself requires intense low-level hand-tuning and debugging. This is captured inside the implementation of the abstraction. It is done once for each hardware target, then reused across all runtimes from all languages. So the intense hand-tuning is removed from the runtimes in the middle layer, while it benefits all the languages and all the applications in the higher layers. 3.51 +In the middle, standard runtimes require too much effort to create, and discourage reusing schedulers across languages. So PStack defines a hardware abstraction that removes as much as possible from the runtime, including concurrency in the runtime itself. The abstraction makes the runtimes all have similar structure, which simplifies reuse of complex scheduler code among languages. 3.52 3.53 +At the bottom, performance of the runtime itself requires intense low-level hand-tuning and debugging. This is captured inside the implementation of the abstraction. It is done once for each hardware target, then reused across the runtimes from all languages. So the intense hand-tuning is taken out of the runtimes, in the middle layer, while it benefits all languages and hence applications in the higher layers. 3.54 3.55 -\begin{figure*}[htbp] 3.56 -\centering 3.57 - \includegraphics[width=6.5in]{Portability_stack_combined.eps} 3.58 +\subsection{How VMS influences the stack} 3.59 + 3.60 +VMS was chosen as the abstraction in the bottom layer. However, VMS affects multiple interfaces and layers of the stack. At the top, it determines the way parallel constructs are embedded into base languages, and how custom-syntax languages generate their runtime-interactions. Next, between the top and middle, VMS defines the interface for the language layer to talk to the runtime layer. Then within the middle layer, VMS defines two standard function prototypes, so that a runtime consists of implementations of just these two functions. Between middle and bottom, VMS defines a number of services that runtimes in the middle can call, and also defines the interaction between the VMS-implementation and the two runtime functions. 3.61 + 3.62 + 3.63 +\begin{figure*}[ht] 3.64 +\center 3.65 + \includegraphics[width=6in]{Portability_stack_combined.pdf} 3.66 \caption 3.67 - {Depiction of PStack, with layers named on the left, and interfaces between layers named on the right. At the top are applications, grouped by language, below are toolchains plus specializers, in the middle are runtimes connecting languages to hardware, below that are hardware abstractions that collect similar hardware below a single interface, and at the bottom are hardware target platforms. 3.68 + {Depiction of PStack, with layers named on the left, and interfaces between layers named on the right. At the top are toolchains plus specializers, in the middle are runtimes connecting languages to hardware, and below that are hardware abstractions that collect similar hardware below a single interface and simplify runtime implementation. 3.69 } 3.70 \label{figPStack} 3.71 3.72 -\end{figure} 3.73 +\end{figure*} 3.74 3.75 3.76 3.77 -%==================== 3.78 +%%%%%%%%%%%%%%%%%%%%%%%%%%% 3.79 \section{Requirements} 3.80 3.81 -Although the paper focuses on the bottom layer, the requirements for the bottom abstraction are influenced by the layers above. So we present a full picture of the stack, to give context for the bottom layer. 3.82 +Although the paper focuses on the bottom abstraction, its requirements are influenced by the layers above. So we present a full picture of the requirements in the stack, to give a complete picture for the bottom abstraction. 3.83 3.84 \subsection{Top Layer: Language Requirements} 3.85 The languages must be designed to capture all information required to specialize the source for high performance on any target hardware. A computation model, called The Holistic Model\cite{}, suggests that such a canonical set of information exists. 3.86 3.87 PStack proposes to develop the constructs that gather the canonical information set, where some constructs are in the form of specialization helpers such as task-resizers and layout modifiers. The application implements the specialization helpers, thereby encoding information about data structures and how to manipulate them. The seeds of such an approach were laid with work on DKU\cite{}, which demonstrated the success of task-resizing constructs. 3.88 3.89 -The proposal also calls for the use of the BLIS\cite{} approach for managing multiple toolchains, where each toolchain specializes to a different target. The management includes the install process, during which the correct toolchain output is paired to the installation target. Further specialization can thus be naturally added during installation, when exact hardware details are known. If required, runtime tuning and optimization also fit naturally within the approach. 3.90 +PStack also calls for the use of the BLIS\cite{} approach for managing multiple toolchains, where each toolchain specializes to a different target. The management covers the install process, during which the correct toolchain output is paired to the installation target. Further specialization can thus be naturally added during installation, when exact hardware details are known. If required, runtime tuning and optimization also fit naturally within the approach. 3.91 3.92 \subsection{Middle Layer: Runtime Requirements} 3.93 3.94 @@ -155,140 +162,100 @@ 3.95 3.96 \subsection{Bottom Layer: Abstraction Requirements} 3.97 3.98 -The purpose of the bottom abstraction is to reduce the effort of creating the runtime layer. 3.99 +The primary purpose of the bottom abstraction is to reduce the effort of creating the runtime layer. 3.100 3.101 \begin{itemize} 3.102 -\item The abstraction must hide low-level details, making multiple hardware targets present the same interface and use a common runtime. 3.103 -\item The abstraction must hide low-level tuning of the runtime itself, especially synchronization-related tuning. 3.104 -\item The asbstraction must provide common services, such as handling internal synchronization of the runtime itself, creation of tasks, communication, and so on. 3.105 +\item The abstraction must hide details, making multiple hardware targets present the same interface and use a common runtime. 3.106 +\item The abstraction must hide low-level tuning of the runtime itself, like synchronization-related tuning. 3.107 +\item The asbstraction must provide common services, such as handling internal synchronization of the runtime, creation of tasks, communication, etc. 3.108 \item The abstraction must create uniform patterns for runtime implementation, making reuse between runtimes more practical and reducing the effort of making multiple runtimes. 3.109 + 3.110 \end{itemize} 3.111 3.112 -However, the abstraction must not hide \textit{application}-performance-critical information from the runtime, which holds the scheduler that decides when tasks become free and where to execute them. The scheduling choices need to know the communication paths and memory pools in the hardware, along with latency, bandwidth, capacity and computation rate. 3.113 +However, the abstraction must not hide \textit{application}-performance-critical information from the runtime, which holds the scheduler that decides when tasks become ready and where to execute them. The scheduling choices need to know the communication paths and memory pools in the hardware, along with latency, bandwidth, capacity and computation rate. 3.114 3.115 A single abstraction can't both hide details and expose those required by the runtimes to attain high \emph{application} performance. Instead, PStack calls for a family of abstractions, one for each major type of architecture, including a ``hierarchy'' abstraction used to glue together heterogeneous hardware. In each, only the details critical to application performance are exposed to the scheduler in the runtime, thus keeping the number of abstractions needed manageably small, on the order of tens in total. 3.116 3.117 3.118 -%=================== 3.119 -\section{How VMS Fulfills the Abstraction Requirements} 3.120 -This paper's contribution is showing how the Virtualized Master-Slave abstraction\cite{} fits the criteria for the bottom of such a portability software stack. 3.121 3.122 -\subsection{Why not pthreads?} 3.123 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3.124 +\section{Relating VMS Details to Requirements} 3.125 3.126 -At first, it seems that interfaces for building runtimes already exist: pthreads, or MPI, or even OpenCL. They all hide low-level hardware details, while allowing tuning application-performance-critical details. However, upon closer inspection it becomes clear that these all fail to separate concerns in the runtime, don't enforce uniform patterns, don't hide concurrency, don't supply common runtime services, and don't encourage reuse. 3.127 +Given the requirements, how does VMS meet them? We given more detail on VMS, at each place it affects the stack, and show how the details satisfy the requirements. 3.128 3.129 - It may be possible to use these interfaces to implement a higher-level interface that accomplishes the effort-reduction needed. However, such an interface would end up looking much like VMS, and when compared to the simplicity of VMS, which has only a few hundred lines, and compared to the low overhead measured in Section 6, and given that the extra layers interfere with performance tuning, such an alternative may not be worth the effort. 3.130 + 3.131 +\subsection{Top-layer} 3.132 + 3.133 +With VMS, a language is implemented as either a collection of wrapper-library calls embedded into a base language, or as custom syntax. The wrapper-lib functions call a primitive supplied by VMS that suspends the virtual-processor animating the call, and sends a request to the runtime. This same VMS primitive is also used to implement custom syntax, inside the compiler. Thus, the VMS primitive is the means for the language layer to interact with the runtime layer. 3.134 + 3.135 + 3.136 +VMS is invisible to the application, only language constructs are visible -- either wrapper-library calls or custom syntax. From the application-programmer point of view, even an embedded parallelism construct looks like a function call, albeit the data-structure of the virtual-processor animating the code has to be passed as a parameter to the wrapper-lib call. 3.137 3.138 3.139 3.140 -\subsection{VMS as a runtime simplifier} 3.141 3.142 -VMS fulfills the role of simplifying runtime construction in three ways: 1) it removes low-level hardware details from the runtime, especially those related to performance of the runtime itself 2) concurrency of the runtime itself is handled by VMS, so the language-specific portion uses sequential thinking 3) VMS provides the most common services a runtime needs, such as creation of new tasks, distributed malloc, and so on. 3.143 +\subsection{Interface from top to middle} 3.144 3.145 -Handling the runtime's internal concurrency appears to be the most significant simplifier, closely followed by encapsulating low-level performance details. 3.146 +The interface between application-executable and language-runtime is fixed, as the VMS-primitive that sends a request to the runtime. Even though PStack allows executables to be modified during installation or even runtime, via BLIS management of auto-tuners, multi-stage compilers, or binary re-writers, the VMS-primitive still must be used for the executable to interact with the runtime. 3.147 3.148 -When asking those who implemented their runtimes using hardware locks, lock-free constructs, or pthreads, the bulk of their time went to debugging subtle concurrency issues, and attempting to lower the overhead of internal synchronizations by hand-tweaking on hardware-specific issues. Informally, accounts range from one and a half to six months to implement the runtime for a new language, depending mostly on amount of performance tuning. 3.149 3.150 -Similar time has gone into the creation and performance tuning of VMS. On each target machine, details of the atomic instructions, coherency protocol, and communication times force intense low-level tuning of the VMS code. 3.151 +Such a standard interaction mechanism serves not only to modularize the stack, cleanly separating runtime from toolchain, but also to decouple executable from VMS implementation. The VMS primitive is naturally a custom instruction, but can also be, a trap to the OS, a message sent on a port, or a function call -- given appropriate executable modification under BLIS. 3.152 3.153 -However, when implementing the runtime for a new language, by using VMS, such details are hidden, resulting in implementation times measured in days. More significantly, a novel parallel construct can be added in mere hours. That improvement is due to the language-specific portion being decoupled from the low-level hardware and concurrency details. 3.154 +\subsection{Middle layer} 3.155 3.156 3.157 3.158 -\subsection{VMS as reducer of number of runtimes} 3.159 +VMS causes the middle-layer portion of a runtime to be implemented as two functions. The first is the request-handler, which is the part of a scheduler that handles constraints. It determines which work units (tasks) are ready to be animated (executed). 3.160 + The other function, sched-assigner, assigns ready work to hardware. This provides uniform patterns for the runtimes. 3.161 3.162 -Pulling low-level details underneath the abstraction has a second benefit. For all hardware targets with similar application-performance details, the same runtime achieves high runtime-performance. Hence, only one runtime per language is needed for all those targets. So, pulling details out of the runtime and placing them beneath the abstraction has not only simplified runtime implementation, but also reduced the number of runtime implementations. 3.163 + 3.164 3.165 -\subsection{VMS as a runtime uniform-izer} 3.166 +When a request is ready for the runtime, VMS calls the request-handler function, and when hardware is free for work, VMS calls the scheduler-assign function. Thus, the language portion of the runtime is passive. 3.167 3.168 -In the bigger picture, when a new 3.169 +By keeping control-flow inside VMS, the language-supplied portion of the runtime is simplified. Control flow includes any concurrency, and so is inside the VMS-implementation. Hence, the language-supplied runtime functions are sequential code, even though they implement the \textit{semantics} of language-level synchronization constructs. This simplifies runtime implementation. 3.170 3.171 -\subsection{VMS as a reuse encourager} 3.172 +This structure is also the reason VMS encourages reuse of scheduler code. Scheduling is sub-divided into distinct modules: constraint-management (IE enforcing dependencies); and assigning work to resources. The assignment module is especially straight-forward to share between languages. 3.173 3.174 -The language-specific parts of the runtime consist of handling constraints on scheduling work, and choosing where and when to assign the work to animators (IE, where and when to execute). 3.175 +Because application performance is most strongly influenced by communication within the hardware, the assignment module is critical. For high performance, it also tends to be complex. Thus, simple reuse of it is a significant benefit. 3.176 3.177 -====== 3.178 3.179 -Details of VMS interface, details of its impl on multi-core, details of differences on different machines. 3.180 +\subsection{Interface from middle to bottom} 3.181 3.182 -wrapper-lib calls VMS-supplied primitive that suspends the virtual-processor calling the lib, and sends a request to VMS. VMS calls lang-supplied plugin to handle requests -- this is the part of the scheduler that handles constraints -- it determines which virt-processors must remain suspended, and which are free to be re-animated. 3.183 3.184 -The language is implemented as either a collection of wrapper-lib calls embedded into the base language, or as custom syntax that uses uses the VMS-supplied primitive to suspend virtual processors and send requests to VMS. 3.185 3.186 3.187 -VMS is invisible to the application, only language constructs are visible. From the application-programmer point of view, the embedded version looks like a function call, albeit the data-struc of the virtual-processor animating the code has to be passed as a parameter to the wrapper-lib call. 3.188 +VMS's plugin API is the interface between the runtime and the bottom abstraction-implementation. The API has calls to register language-supplied runtime functions with the bottom abstraction, as well as support services. 3.189 3.190 -Hence, VMS is invisible to the application, only language constructs are visible. 3.191 3.192 -The wrapper-lib call is standard library code that is loaded along with the application executable. 3.193 - 3.194 -However, VMS primitives may be hardware-implemented, or loaded as OS modules, or dynamic or static libraries. Rhey are naturally custom instructions, but may be emulated by software. 3.195 - 3.196 -The interface between application-executable and language-runtime is the VMS-primitive that sends a request to VMS. The language-runtime receives the request under control of VMS, which calls a language-supplied request-handling function and passes the request as a parameter. This passive behavior of the request handler leaves control-flow inside VMS, which is part of hiding concurrency from the language-runtime implementation. 3.197 - 3.198 -The interface between the runtime and VMS is VMS's plugin API. The runtime is implemented as two functions, whose pointers are handed to VMS. VMS then controls the flow of execution. When a request is ready for the runtime, VMS cIalls the request-handler function, and when a spot on hardware is free for work, VMS calls the scheduler-assign function. Hence, the language implements its runtime as two isolated functions. By keeping control-flow inside VMS, the language-specific portion of the runtiem is simplified. 3.199 - 3.200 -This structure is also the reason VMS encourages reuse of scheduler code. The VMS API separates out control flow from scheduling, so scheduling code is isolated, with well-defined interfaces. Scheduling is then further sub-divided into modules: constraint-management (IE enforcing dependencies); and choosing physical location to place work. Each has its own well-defined interface, and they communicate to each other via VMS-managed shared state. 3.201 - 3.202 -The greatest application performance impact due to the scheduler is communication it causes. 3.203 - 3.204 -, management of the memory hierarchy, and the match between work-characteristics and hardware-characteristics (IE, assigning to accelerator vs CPU). Hence, significant work goes into implementing strategies and mechanisms for finding the best assignment-choices. Such implementations are only loosely coupled to language, through the shared state by which the request-handler informs the assigner of what work is ready to be animated. 3.205 - 3.206 -Hence, it is straight-forward to reuse the code that assigns work to physical locations. The only language-specific influence on the assigner is the shared constraint-state. 3.207 3.208 3.209 3.210 +Reduction of the number of runtimes is accomplished this way. Hardware targets with similar structure present the same interface, requiring only one runtime. 3.211 3.212 -========= 3.213 -Pieces of portability: bundling quad for treating distributed same as global shared. 3.214 +Only structural elements that affect assignment choices are exposed in the API. For example, memory hierarchy is exposed as a VMS-defined data-structure made available to the sched-assign function. The details in the data convey the connectivity, communication, and sizes, which the assigner may use to optimize choices. 3.215 3.216 -Approach of registering gadgets with scheduler, for use as needed 3.217 +\subsection{Bottom layer} 3.218 3.219 -Approach of hierarchical division to match to hierarchy on hardware, with bundling quad to treat each memory as if shared. 3.220 +The bottom layer consists of implementations of the VMS API and VMS primitives used in the upper levels, as well as the control-flow of the runtimes. Each hardware platform has its own implementation, allowing low-level hand-tweaking. This effort is performed once per hardware target, so is amortized across applications. Pulling this tuning below the interface also simplifies the runtime-portion in the middle layer. 3.221 3.222 -========= 3.223 -Q: communication within the kernel -- gather all data the kernel needs, give to call to start the work. In middle, second set of bundlers gather data for inter-kernel comm. 3.224 - 3.225 -So, instead of comm-as-needed, trying to mark pointers so they send-away to remote memory to grab the desired, as is done now -- instead, kernel marks explicit comm-points -- the scheduler takes care of what gets communicated to, and the divider has marked size, so kernel-communicator uses that divider-provided data to decide what to package up. 3.226 - 3.227 -Make the communicator such that it puts data in the place it would be if really were shared-memory. So, the comm-point is free-choice of scheduler, whether it ignores, in the case of actual shared memory, and just does a sync, or instead does bundling and inter-memory comm. On multi-core coherent memory, probably even better perf to do virtual nodes, and arrange order such that all comm'd to one place, does the work, then comm'd back -- be nice if had explicit pre-fetcher the scheduler could use. 3.228 - 3.229 -So -- the code is written as if shared-memory, but register comm-pairs, so if not shared-mem, scheduler does explicit comms, to put data into position it would hold if really were shared-mem. 3.230 - 3.231 -That's the trick.. However, may cause problems when granularity of comm is inherently one word. Q: this case exists? What algs mapped onto what hardware would have inherently one word of comm at a time? What about NP problem performed on large data-struct. Is there any way to do what can, save up? In kernel code, how know got to a point where need outside-of-mem data? Means code has to be written such that it knows data is larger than the mem-struct it's running within. 3.232 - 3.233 -Hmmmm.. how write a kernel that runs within a mem-struct, and knows, without expensive check, when it needs outside data? First thought on simply how, is to mark pointers as either in-mem or out.. other thought might be to make VMS provide, under covers, the differentiator -- and kernel registers something that saves up accesses to out-of-mem data. Then, when VMS hits an out-of-mem, it calls registered handler, and when handler says "have enough", scheduler does the remote comm to grab whatever data needed. Then uses the comm-quad to send requested, gather in remote, scatter in local. 3.234 - 3.235 -Q: when do the comm, how decide what local data to ditch? Thinking software cache makes sense in this case.. 3.236 - 3.237 -Okay.. so VMS hides, maybe? Or, app says what it's like (how small transfers might be, whether it has psuedo-pointers, how to decide evictions).. and PStack chooses whether does comm-quad or software-cache, and chooses sizes with knowledge of consequences of size forcing particular comm-style, where some styles more efficient energy or latency-hiding than others.. (styles being software-cache vs save-up-then get and evict vs get chunk-at-time and reuse space put previous chunk) 3.238 - 3.239 -Note that with LPGPU arch, can just stream right to/form memory -- no separate buffer needed (as is case with DMA, which needs linear addresses). 3.240 - 3.241 -Thinking one idea might be to do hybrid software-cache -- where the mem-struct is treated as the cache -- but it doesn't do addr translation -- it only tracks which app-structs within the mem-struc to evict, and when needs from remote, auto-goes-gets them (suspending comp-ctxt).. when this "app-struct aware software-cache" gets the needed app-struct from remote, it puts it on top of previous app-struct was in the mem-struc.. and adjusts the offset-ptrs in the other app-structs -- means all pointers must be bi-directional, so app-struct-cache can find quickly all referencers -- or, means each app-struct comes in has to register its pointers with mem-struc -- yeah, that makes more sense -- turns mem two-dimensional, and gives central control-point over whether pointers are in-mem-struc or out. That avoids the issue of app-strucs being non-constant size (with bi-dir ptrs, they grow when more point to them).. although, that issue is fixed by having a separate mem-struc to hold the pointers for each app-struc. Then, app-struc references an offset within the array of its pointers, where the array-reference indicates that it's in a different mem-struc. 3.242 - 3.243 -This allows multi-dimensional memories, so all app-strucs are constant size, and only number of them changes (in this case, pointer to an app-struc is itself an app-struc that's placed into a separate mem-struc) 3.244 - 3.245 -Okay, so with mem-strucs, no longer any such thing as an array? Maybe -- say, fixed-size array inside a mem-struc? Will have to see consequence in practice.. and who decides if array-in-mem-struc vs separate mem-struc.. app or PStack? 3.246 - 3.247 -%======================= 3.248 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3.249 \section{Experimental Setup} 3.250 -The experiments were run on three machines: a one-socket 2 core 3GHz workstation, a one-socket 4 core SandyBridge 3.3GHz workstation, and a four-socket by 10 core each Westmere EX 2.4GHz server. 3.251 +The experiments to measure VMS overhead were run on three machines: a one-socket 2 core 3GHz workstation (``1x2''), a one-socket 4 core SandyBridge 3.3GHz workstation (``1x4''), and a four-socket by 10 core each Westmere EX 2.4GHz server (``4x10''). 3.252 3.253 The code consists of two loops: the innermost is a single task, while the outer repeats that task a number of times. The inner does throw-away work entirely within registers, where the number of iterations sets the amount of work in the task. After the inner completes, a synchronization is performed, which pairs each task to a sync operation. The outer then repeats the sequence of task-then-sync a large number of times to gain statistical accuracy and dominate any other sources of overhead. 3.254 3.255 -Two versions of the code were written: one that used pthread, a second that used a VMS-implemented equivalent called Vthread. Both versions are the same except for the implementation of scheduling triggered by the synchronization construct. Hence, any difference in execution time is due to the difference in scheduling implementation. Pthread uses the pthread library's scheduling which layers over the Linux kernel's implementation. Vthread uses a VMS plugin that layers over the VMS system's implementation of the tie-point guarantee. 3.256 +Two versions of the code were written: one that used pthread, a second that used a VMS-implemented equivalent called Vthread. Both versions have the same semantics, differing only in the implementation of scheduling triggered by the construct. Hence, any difference in execution time is due to the difference in scheduling overhead. Pthread uses the pthread library's scheduling which layers over the Linux kernel's implementation. Vthread uses a VMS plugin that layers over the VMS system's implementation of the tie-point guarantee. 3.257 3.258 3.259 -%======================= 3.260 +%%%%%%%%%%%%%%%%%%%%%%% 3.261 \section{Results} 3.262 -The new experimental results given in this paper focus on the overhead of the language/runtime, with the goal of showing that a language based on VMS enjoys low overhead compared to standard pthreads. We illustrate the amount of overhead by plotting a curve whose shape is determined by the overhead. 3.263 +The new experimental results given in this paper focus on the overhead of the runtime, with the goal of showing that a language based on VMS enjoys low overhead compared to standard pthreads. We illustrate the amount of overhead by plotting a curve whose shape is determined by the overhead. 3.264 3.265 The idea of the curve is to compare total CPU time to just the time spent doing work. The difference between them is the overhead of scheduling, including synchronization construct overhead, which consists of: switching from application to scheduler; updating the sync-construct state; choosing a new thread to schedule; and deciding on which core to re-animate that thread. 3.266 3.267 The ratio of total CPU time to work time gets larger as the overhead increases, raising overhead's percent of the total. When the ratio is exactly 2, the work time exactly equals the overhead. Larger ratio indicates overhead dominates, smaller indicates work dominates. 3.268 3.269 -Hence, to find the size of the overhead, find the size of task where the work in the task exactly equals the overhead of scheduling the task. To do this, we plot the ratio on the y axis and single-task-work on x axis. When the ratio equals 2, the cycles of work in the task equals the overhead of scheduling the task. So the overhead can be read off the graph, as the task-size at the y=2 point. 3.270 +Hence, to find the size of the overhead, find the size of task where the work in the task exactly equals the overhead of scheduling the task. To do this, we plot the ratio on the y axis and single-task-time on x axis. When the ratio equals 2, the cycles of work in the task equals the overhead of scheduling the task. So the overhead can be read off the graph, as the task-size at the y=2 point. 3.271 3.272 3.273 \subsection{Performance Results} 3.274 @@ -305,7 +272,7 @@ 3.275 3.276 Figure \ref{figCray1Results} shows results for the 1x2 machine. The curves for Vthread cluster together in the lower-left, indicating that overhead is smaller than for pthread. The tight clustering means that overhead remains constant as the number of threads is increased. 3.277 3.278 -The the values for overhead per task is read off the graph by finding where the curve crosses $y=2$. This shows that Vthread has around 700 cycles of overhead, while pthread starts at 3800 for 8 threads, goes up to 8200 for 32 threads, and up into the tens of thousands for 128 threads. Not shown is the curve for 512 threads, which has more than 100,000 cycles of overhead. 3.279 +The values for overhead per task is read off the graph by finding where the curve crosses $y=2$. This shows that Vthread has around 700 cycles of overhead, while pthread starts at 3800 for 8 threads, goes up to 8200 for 32 threads, and then into the tens of thousands for 128 threads. Not shown is the curve for 512 threads, which has more than 100,000 cycles of overhead. 3.280 3.281 3.282 \begin{figure}[ht!] 3.283 @@ -332,9 +299,11 @@ 3.284 3.285 However, things change dramatically on the 4 socket by 10 core-each Westmere machine, seen in Figure \ref{figXoanonResults}. Here, inter-socket communication dominates, and VMS gains orders of magnitude advantage. For one thread per hardware context, Vthread's overhead is around 2000 cycles, while pthread starts at around 50,000 and goes up from there. 3.286 3.287 -The implementation of VMS is different on this machine, and demonstrates the effectiveness of pulling hardware details below the abstraction. The large number of cores and inter-socket communication times causes excessive contention, when using the implementation best for the single-socket machines. We solved the problem with an increasing-random-backoff approach, which we use on the 4x10 multi-socket machine. This reduces overhead by an order of magnitude on it. 3.288 +The implementation of VMS is different on this machine than the single-socket ones, and demonstrates the effectiveness of pulling hardware details below the abstraction. 3.289 3.290 - Without an abstraction like VMS, the runtime implementers would have to discover and solve such problems separately for each language on each machine. Because this required several weeks, the use of advanced tools, and detailed knowledge of the hardware, the savings for the language-runtime implementers is significant. This indicates VMS's ability to reduce runtime implementation effort. 3.291 +When using the single-socket implementation on the 4x10, the large number of cores and inter-socket communication times causes excessive contention. We solved the problem for the 4x10 machine with an increasing-random-backoff approach. It reduces overhead by an order of magnitude on the 4x10. 3.292 + 3.293 + Without an abstraction like VMS, the language implementers would have to discover and solve such problems separately for each language on each machine. Because this required several weeks, the use of advanced tools, and detailed knowledge of the hardware, the savings for the language-runtime implementers is significant. This is evidence of VMS's ability to reduce middle-layer runtime implementation effort. 3.294 3.295 %\mbox 3.296 % {\subfigure{\includegraphics[width=2.3in, angle = -90] 3.297 @@ -346,7 +315,9 @@ 3.298 3.299 3.300 \subsection{Implementation Time Results} 3.301 -As seen in a previous paper on VMS\citation{}, VMS makes runtime implementation quick and easy. The results are re-printed here to support the claim that VMS meets the PStack requirement of reducing runtime implementation effort. These compare to months to learn code of a pre-existing multi-threaded runtime, modify it, and debug the multi-threaded implementation. 3.302 +As seen in a previous paper on VMS\cite{}, it makes runtime implementation quick and easy. The results are re-printed here to support the claim that VMS meets the requirement of reducing runtime implementation effort. 3.303 + 3.304 +From previous experience and informal discussions with others, equivalently low-overhead tuned runtimes created the traditional way would take several months. Similar time is also expected to learn the code of a pre-existing multi-threaded highly tuned runtime, then modify, debug and re-tune it. 3.305 3.306 Implementation time is reduced by the uniform nature of VMS-based runtimes, freedom from details hidden by the VMS interface, the helper facilities VMS provides, VMS's debugging facilities, and freedom from multi-threading issues due to VMS's tie-point based ordering guarantee. When combined, they lead to the fast implementation times seen in Table \ref{tabPersonDaysLang}. 3.307 3.308 @@ -372,302 +343,73 @@ 3.309 \end{table} 3.310 3.311 3.312 +%%%%%%%%%%%%%%%%%%%%%% 3.313 +\section{Future Work} 3.314 +To further explore the simplification and effort-reduction provided by the VMS abstraction, a semester long project course is being given for undergraduates. In the class, pairs of students design and implement a domain-specific parallel language built upon VMS and embedded into C. They are asked to track the time spent on each phase of design and implementation of their language. 3.315 3.316 -\section{Future Work} 3.317 -To further explore the simplification and effort-reduction provided by the VMS abstraction, a semester long project course is being given for undergraduates. In the class, pairs of students design and implement a domain-specific parallel language embedded into C. They are asked to track the time spent on each phase of design and implementation of their language. 3.318 3.319 - 3.320 +%%%%%%%%%%%%%%%%%%%%%%% 3.321 \section{Conclusion} 3.322 3.323 3.324 - 3.325 -\section{Planning} 3.326 - 3.327 - (6.5" x 9" 10pt 2 col) 3.328 - 3.329 -require new parallel programming paradigms, new methods of application design, new structures for system software, and new models of interaction among applications, compilers, operating systems, and hardware. 3.330 - 3.331 -what benefits performant portability will bring 3.332 - 3.333 -abstraction must have certain properties to fulfill its role in stack. Contribution of paper is new results confirming suitability of VMS to be that abstraction. 3.334 - 3.335 The Need: background on portability stack -- the end-goal sought, the fundamentals involved in any solution to provide it, how proposed stack from last year is updated to accord with those fundamentals in achieving end-goal. The elements of the stack. What function/role each element serves. 3.336 3.337 -Describe details of bottom of software stack and details of how cross-bar works, and the need for low-work runtime impl, and the need for reuse of runtime code across languages. 3.338 +Describe details of bottom of software stack 3.339 3.340 what need in bottom, to support eco-system\cite{} 3.341 3.342 - Many runtime systems are implemented -- for each language, one runtime for each variant of the abstraction. 3.343 - 3.344 + 3.345 Expect domain-specific languages -- these embed new behaviors into base language. Different from library because cannot understand the behavior of the call based on the base language alone. The runtime system provides behavior beyond the base language. This approach makes for quick creation of languages specialized to narrow domains. 3.346 3.347 -This approach is likely to fail without performant portability for its user's benefit, and a low-cost way to implement it for the language provider. 3.348 3.349 -In effect, just about the only purpose and criteria for judgement of the base abstraction is its ability to reduce effort, and its ability to support the portability features of the upper layers. 3.350 +%%%%%%%%%%%%%%%%%%%%%%%% 3.351 +\section{How VMS Fulfills the Abstraction Requirements} 3.352 3.353 -Effort has two aspects: in implementing a new language, and in porting existing languages to new hardware. 3.354 +\subsection{Why not pthreads?} 3.355 3.356 -Support for upper layers is 3.357 +At first, it seems that interfaces for building runtimes already exist: pthreads, or MPI, or even OpenCL. They all hide low-level hardware details, while allowing tuning application performance critical details. However, upon closer inspection it becomes clear that these all fail to separate concerns in the runtime, don't enforce uniform patterns, don't hide concurrency, don't supply common runtime services, and don't encourage reuse. 3.358 3.359 -Hence, the two primary aspects of the base hardware abstraction are its ability to reduce the effort of implementing the set of runtime systems for a given language, and its ability to reduce the number of such runtime systems. 3.360 + It may be possible to use these interfaces to implement a higher-level interface that accomplishes the effort-reduction needed. However, such an interface would end up looking much like VMS, and when compared to the simplicity of VMS, which has only a few hundred lines, and compared to the low overhead measured in Section 6, and given that the extra layers interfere with performance tuning, such an alternative may not be worth the effort. 3.361 3.362 -for abstraction in bottom layer, here's VMS, detailed in LCPC paper, with new results that show it can, indeed, fulfil the base abstraction role for the class of multi-core hardware. 3.363 + 3.364 3.365 +\subsection{VMS's influence on the stack} 3.366 3.367 +VMS affects the interfaces between layers of the stack. At the top, VMS determines the way parallel constructs are embedded into base languages, and how custom-syntax languages generate their runtime-interactions. Between the top and middle, VMS defines the interface for the language/toolchain layer to talk to the runtime layer. Within the middle layer, VMS defines two standard function prototypes, and a runtime consists of implementations of these two functions. Between middle and bottom, VMS defines a number of services that runtimes in the middle can call, and also defines the interaction between the abstraction-implementation and the two runtime functions. 3.368 3.369 3.370 +\subsection{VMS as a runtime simplifier} 3.371 3.372 +VMS fulfills the role of simplifying runtime construction in three ways: 1) it removes low-level hardware details from the runtime, especially those related to performance of the runtime itself 2) concurrency of the runtime itself is handled by VMS, so the language-specific portion uses sequential thinking 3) VMS provides the most common services a runtime needs, such as creation of new tasks, distributed malloc, and so on. 3.373 3.374 +Handling the runtime's internal concurrency appears to be the most significant simplifier, closely followed by encapsulating low-level performance details. 3.375 3.376 +When asking those who implemented their runtimes using hardware locks, lock-free constructs, or pthreads, the bulk of their time went to debugging subtle concurrency issues, and attempting to lower the overhead of internal synchronizations by hand-tweaking on hardware-specific issues. Informally, accounts range from one and a half to six months to implement the runtime for a new language, depending mostly on amount of performance tuning. 3.377 3.378 +Similar time has gone into the creation and performance tuning of VMS. On each target machine, details of the atomic instructions, coherency protocol, and communication times force intense low-level tuning of the VMS code. 3.379 3.380 +However, when implementing the runtime for a new language, by using VMS, such details are hidden, resulting in implementation times measured in days. More significantly, a novel parallel construct can be added in mere hours. That improvement is due to the language-specific portion being decoupled from the low-level hardware and concurrency details. 3.381 3.382 3.383 3.384 - 3.385 +\subsection{VMS as reducer of number of runtimes} 3.386 3.387 +Pulling low-level details underneath the abstraction has a second benefit. For all hardware targets with similar application-performance details, the same runtime achieves high runtime-performance. Hence, only one runtime per language is needed for all those targets. So, pulling details out of the runtime and placing them beneath the abstraction has not only simplified runtime implementation, but also reduced the number of runtime implementations. 3.388 3.389 +\subsection{VMS as a runtime uniform-izer} 3.390 3.391 +In the bigger picture, when a new 3.392 3.393 +\subsection{VMS as a reuse encourager} 3.394 3.395 -Describe details of bottom of software stack and details of how cross-bar works, tie to the need for low-work runtime impl, and the need for reuse of runtime code across languages. 3.396 +The language-specific parts of the runtime consist of handling constraints on scheduling work, and choosing where and when to assign the work to animators (IE, where and when to execute). 3.397 3.398 -Describe how VMS fulfills those needs. Details of its interface, details of its impl on multi-core, details of differences on different machines. 3.399 -Leave as-is for 1x4 and 1x2 -- make entirely different impl for 2x4 and another for 4x10 3.400 3.401 -\section{example text} 3.402 - 3.403 -More fascinating text. Features galore, plethora of promises. 3.404 -\begin{ednote}{BCM} 3.405 - This ednote is marked as mine. 3.406 -\end{ednote} 3.407 - 3.408 -\section{This is Another Section} 3.409 - 3.410 -Some embedded literal typeset code is shown below. Note that line or 3.411 -page breaks can occur in the middle of code typeset this way. To 3.412 -avoid such line or page breaks, put the code inside a figure 3.413 -environment instead. 3.414 - 3.415 -\begin{small} 3.416 -\begin{verbatim} 3.417 -int wrap_fact(ClientData clientData, 3.418 - Tcl_Interp *interp, 3.419 - int argc, char *argv[]) { 3.420 - int result; 3.421 - int arg0; 3.422 - if (argc != 2) { 3.423 - interp->result = "wrong # args"; 3.424 - return TCL_ERROR; 3.425 - } 3.426 - arg0 = atoi(argv[1]); 3.427 - result = fact(arg0); 3.428 - sprintf(interp->result,"%d",result); 3.429 - return TCL_OK; 3.430 -} 3.431 -\end{verbatim} 3.432 -\end{small} 3.433 - 3.434 -Now we're going to cite somebody. Watch for the cite tag. Here it 3.435 -comes~\cite{heidrich,perl5,otcl}. And a bit later we will cite 3.436 -another one. Stay tuned~\cite{ousterhout}. 3.437 - 3.438 -\section{This Section has Sub-Sections} 3.439 -\label{sec:secs} 3.440 - 3.441 -This text is the introduction to Section~\ref{sec:secs}. 3.442 - 3.443 -\begin{figure}[htbp] 3.444 -\begin{centering} 3.445 -\epsfig{file=sample.eps, width=2.50in} 3.446 -\small\itshape 3.447 -\caption{\small\itshape This figure was created with \texttt{xfig}. If you 3.448 -want it to span two columns, use \texttt{figure*} in the LaTeX source file.} 3.449 -\label{fig-sample} 3.450 -\end{centering} 3.451 -\end{figure} 3.452 - 3.453 -\subsection{First Sub-Section} 3.454 - 3.455 -Here's a typical figure reference. Figure~\ref{fig:flowchart} is 3.456 -centered at the top of the column. It may be scaled. If so, you may 3.457 -have to tweak the numbers to get the size you want. It may be 3.458 - hard to do this. 3.459 - 3.460 - 3.461 -\begin{figure}[tb] 3.462 - \begin{center} 3.463 -% \psfig{file=figure.eps,scale=0.45} % PostScript figure 3.464 - \texttt{<insert figure here>} % remove this line 3.465 - \caption{Wonderful flowchart} 3.466 - \label{fig:flowchart} 3.467 - \end{center} 3.468 -\end{figure} 3.469 - 3.470 -This text came after the figure, so we'll casually refer to 3.471 -Figure~\ref{fig:flowchart} as we go on our merry way. 3.472 - 3.473 -% you need to work on the workingdraft document right here soon 3.474 -\HERE 3.475 - 3.476 -\subsection{Footnotes} 3.477 - 3.478 -For the Usenix style, footnotes are not allowed: endnotes 3.479 -are, although they are 3.480 -deprecated.\ifhasendnotes\footnote{Thus, this is not a 3.481 -footnote}\fi\ Try to avoid both footnotes and endnotes in 3.482 -technical writing. It is best to use parenthetical or 3.483 -subordinate clauses instead. If you want endnotes anyhow, 3.484 -use the "endnotes" documentstyle option and include a 3.485 -\verb+\makeendnotes+ command at the end of your document. 3.486 -You will still be whined at. 3.487 - 3.488 -\subsection{Tables and Code} 3.489 - 3.490 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3.491 -\begin{table*}[htbp] 3.492 -\centering 3.493 -\begin{tabular}{|c||c|c|c|c||c|c|c|c|c|c|l|}\hline 3.494 - {\bf Cloak} 3.495 - & \multicolumn{4}{c||}{\textbf{User \texttt{ezk}}} 3.496 - & \multicolumn{6}{c|}{\textbf{User \texttt{joe}}} 3.497 - & \multicolumn{1}{c|}{\textbf{Meaning}} 3.498 -\\\cline{2-11} 3.499 - {\bf Mask} 3.500 - &{J1} 3.501 - &{J2} 3.502 - &{J3} 3.503 - &{J4} 3.504 - &{E5} 3.505 - &{E6} 3.506 - &{E7} 3.507 - &{E8} 3.508 - &{E9} 3.509 - &{E10} 3.510 - &\multicolumn{1}{c|}{\textbf{for files J1--E10}} 3.511 -\\\hline 3.512 - {+000} 3.513 - & 3.514 - & 3.515 - & 3.516 - & 3.517 - & 3.518 - & 3.519 - & 3.520 - & 3.521 - & 3.522 - & 3.523 - & Show files to owners only 3.524 -\\\hline 3.525 - {+007} 3.526 - & 3.527 - & 3.528 - &{A} 3.529 - & 3.530 - & 3.531 - & 3.532 - &{A} 3.533 - &{A} 3.534 - & 3.535 - & 3.536 - & Show files to owners and others 3.537 -\\\hline 3.538 - {+070} 3.539 - & 3.540 - &{A} 3.541 - &{A} 3.542 - & 3.543 - &{A} 3.544 - & 3.545 - &{A} 3.546 - &{A} 3.547 - & 3.548 - & 3.549 - & Show files to owners and group members 3.550 -\\\hline 3.551 -\end{tabular} 3.552 -\small\itshape 3.553 -\caption{\small\itshape Here is a complex table that spans two columns. It 3.554 - shows how also to straddle the table cells.} 3.555 -\label{tab-sample} 3.556 -\end{table*} 3.557 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3.558 - 3.559 -It can get tricky typesetting Tcl and C code in LaTeX because they 3.560 -share a lot of mystical feelings about certain magic characters. You 3.561 -will have to do a lot of escaping to typeset curly braces and percent 3.562 -signs, for example, like this: ``The \verb@%module@ directive sets 3.563 -the name of the initialization function. This is optional, but is 3.564 -recommended if building a Tcl 7.5 module. Everything inside the 3.565 -\verb@%{@, \verb@%}@ block is copied directly into the 3.566 -output. allowing the inclusion of header files and additional C code.'' 3.567 - 3.568 -Sometimes you want to really call attention to a piece of text. You 3.569 -can center it in the column like this: 3.570 -\begin{center} 3.571 -\verb@_1008e614_Vector_p@ 3.572 -\end{center} 3.573 -and people will really notice it. 3.574 - 3.575 -Now this is an ingenious way to get a forced space. \texttt{Real~$*$} 3.576 -and \texttt{double~$*$} are equivalent. 3.577 - 3.578 - 3.579 -\subsection{Lists} 3.580 - 3.581 -You can make lists using LaTeX's listing environments 3.582 -(\texttt{itemize}, \texttt{enumerate}, and \texttt{description}). 3.583 -These environments can be nested (e.g. an itemized list can be an 3.584 -element of an enumerated list). 3.585 - 3.586 -An \texttt{itemize} list looks like this: 3.587 -\begin{itemize} 3.588 -\item The map structure defines an address space. 3.589 -\item The page structure manages a page of physical memory. 3.590 -\end{itemize} 3.591 - 3.592 -An \texttt{enumerate} list is like an itemized list, except that it is 3.593 -numbered: 3.594 -\begin{enumerate} 3.595 -\item The map structure defines an address space. 3.596 -\item The page structure manages a page of physical memory. 3.597 -\end{enumerate} 3.598 - 3.599 -A \texttt{description} list uses words rather bullets or numbers: 3.600 -\begin{description} 3.601 -\item[\textbf{map structure:}] defines an address space. 3.602 -\item[\textbf{page structure:}] manages a page of physical memory. 3.603 -\end{description} 3.604 - 3.605 -\subsection{Last Sub-Section} 3.606 - 3.607 -Well, it's getting boring isn't it. This is the last subsection 3.608 -before we wrap it up. 3.609 - 3.610 -\section{Acknowledgments} 3.611 - 3.612 -A polite author always includes acknowledgments. You 3.613 -should thank everyone, 3.614 -especially those who funded the work. 3.615 - 3.616 +%%%%%%%%%%%%%%%%%%%%%%%%%% 3.617 \section{Availability} 3.618 3.619 -It is great news if this section can say that your 3.620 -app, WonderfulApp is free 3.621 -software, available via anonymous FTP from 3.622 -\url{ftp://ftp.dom/pub/myname/Wonderful}. Also, it's even better 3.623 -when you can write that information is also available on the Wonderful 3.624 -homepage at \url{http://www.dom/~myname/SWIG}. 3.625 +VMS is free software, available from the homepage at \url{http://www.virtualizedmasterslave.org} 3.626 3.627 -Now we get serious and fill in those references. Remember you will 3.628 -have to run latex twice on the document in order to resolve those 3.629 -cite tags you met earlier. This is where they get resolved. 3.630 -We've preserved some real ones in addition to the template-speak. 3.631 -After the bibliography you are DONE. 3.632 - 3.633 -% This is where the endnotes (see the ``footnote'' above) 3.634 -% are filled in. Use this only if you have endnotes. 3.635 -\ifhasendnotes\makeendnotes\fi 3.636 3.637 \begin{thebibliography}{99} 3.638 3.639 @@ -698,31 +440,3 @@ 3.640 3.641 \end{document} 3.642 3.643 -% Revision History: 3.644 -% designed specifically to meet requirements of 3.645 -% TCL97 committee. 3.646 -% originally a template for producing IEEE-format articles using LaTeX. 3.647 -% written by Matthew Ward, CS Department, Worcester Polytechnic Institute. 3.648 -% adapted by David Beazley for his excellent SWIG paper in Proceedings, 3.649 -% Tcl 96 3.650 -% turned into a smartass generic template by De Clarke, with thanks to 3.651 -% both the above pioneers 3.652 -% use at your own risk. Complaints to /dev/null. 3.653 -% make it two column with no page numbering, default is 10 point 3.654 - 3.655 -% Munged by Fred Douglis <douglis@research.att.com> 10/97 to separate 3.656 -% the .sty file from the LaTeX source template, so that people can 3.657 -% more easily include the .sty file into an existing document. Also 3.658 -% changed to more closely follow the style guidelines as represented 3.659 -% by the Word sample file. 3.660 -% This version uses the latex2e styles, not the very ancient 2.09 stuff. 3.661 -% 3.662 - 3.663 -% Revised July--October 2002 by Bart Massey, Chuck Cranor, Erez 3.664 -% Zadok and the FREENIX Track folks to ``be easier to use and work 3.665 -% better''. Hah. Major changes include transformation into a 3.666 -% latex2e class file, better support for drafts, and some 3.667 -% layout improvements. 3.668 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3.669 -% for Ispell: 3.670 -% LocalWords: workingdraft BCM ednote SubSections xfig SubSection joe
