Unverified Commit 0851b197 by Sayak Kundu Committed by GitHub

Merge pull request #22 from TILOS-AI-Institute/flow_scripts

Flow scripts
parents e3286997 462d7559
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<style type="text/css">ol.lst-kix_8wbl4tsmsea1-5.start{counter-reset:lst-ctn-kix_8wbl4tsmsea1-5 0}.lst-kix_kha5qfkechm0-0>li{counter-increment:lst-ctn-kix_kha5qfkechm0-0}.lst-kix_uet2thjh9w7v-6>li{counter-increment:lst-ctn-kix_uet2thjh9w7v-6}ol.lst-kix_nurf0486bu14-0{list-style-type:none}.lst-kix_jyurzd4jvnuk-1>li{counter-increment:lst-ctn-kix_jyurzd4jvnuk-1}ol.lst-kix_nurf0486bu14-1{list-style-type:none}ol.lst-kix_nurf0486bu14-2{list-style-type:none}ol.lst-kix_nurf0486bu14-3{list-style-type:none}ol.lst-kix_m38g95t6y81f-7.start{counter-reset:lst-ctn-kix_m38g95t6y81f-7 0}ol.lst-kix_j8b5qmagvguq-4.start{counter-reset:lst-ctn-kix_j8b5qmagvguq-4 0}ol.lst-kix_nurf0486bu14-4{list-style-type:none}ol.lst-kix_nurf0486bu14-5{list-style-type:none}ol.lst-kix_nurf0486bu14-6{list-style-type:none}ol.lst-kix_nurf0486bu14-7{list-style-type:none}ol.lst-kix_nurf0486bu14-8{list-style-type:none}ol.lst-kix_nurf0486bu14-4.start{counter-reset:lst-ctn-kix_nurf0486bu14-4 0}.lst-kix_hp102ryw7avj-8>li:before{content:"" counter(lst-ctn-kix_hp102ryw7avj-8,lower-roman) ". "}.lst-kix_j8b5qmagvguq-5>li{counter-increment:lst-ctn-kix_j8b5qmagvguq-5}.lst-kix_hp102ryw7avj-4>li:before{content:"" counter(lst-ctn-kix_hp102ryw7avj-4,lower-latin) ". "}.lst-kix_hp102ryw7avj-5>li:before{content:"" counter(lst-ctn-kix_hp102ryw7avj-5,lower-roman) ". "}.lst-kix_hp102ryw7avj-2>li:before{content:"" counter(lst-ctn-kix_hp102ryw7avj-2,lower-roman) ". "}.lst-kix_hp102ryw7avj-3>li:before{content:"" counter(lst-ctn-kix_hp102ryw7avj-3,decimal) ". "}.lst-kix_hp102ryw7avj-6>li:before{content:"" counter(lst-ctn-kix_hp102ryw7avj-6,decimal) ". "}.lst-kix_hp102ryw7avj-7>li:before{content:"" counter(lst-ctn-kix_hp102ryw7avj-7,lower-latin) ". "}ol.lst-kix_hp102ryw7avj-8.start{counter-reset:lst-ctn-kix_hp102ryw7avj-8 0}.lst-kix_wz0jpb95pupm-3>li{counter-increment:lst-ctn-kix_wz0jpb95pupm-3}ol.lst-kix_kha5qfkechm0-5.start{counter-reset:lst-ctn-kix_kha5qfkechm0-5 0}.lst-kix_taizt4vy16t3-0>li{counter-increment:lst-ctn-kix_taizt4vy16t3-0}ol.lst-kix_taizt4vy16t3-5.start{counter-reset:lst-ctn-kix_taizt4vy16t3-5 0}ol.lst-kix_vqm3flmi6t74-0{list-style-type:none}ol.lst-kix_vqm3flmi6t74-4.start{counter-reset:lst-ctn-kix_vqm3flmi6t74-4 0}ol.lst-kix_m38g95t6y81f-2.start{counter-reset:lst-ctn-kix_m38g95t6y81f-2 0}ol.lst-kix_vqm3flmi6t74-5{list-style-type:none}ol.lst-kix_vqm3flmi6t74-6{list-style-type:none}.lst-kix_j8b5qmagvguq-1>li{counter-increment:lst-ctn-kix_j8b5qmagvguq-1}ol.lst-kix_vqm3flmi6t74-7{list-style-type:none}ol.lst-kix_vqm3flmi6t74-8{list-style-type:none}ol.lst-kix_vqm3flmi6t74-1{list-style-type:none}ol.lst-kix_vqm3flmi6t74-2{list-style-type:none}ol.lst-kix_vqm3flmi6t74-3{list-style-type:none}ol.lst-kix_vqm3flmi6t74-4{list-style-type:none}.lst-kix_f3p13gvgfnks-6>li{counter-increment:lst-ctn-kix_f3p13gvgfnks-6}.lst-kix_jyurzd4jvnuk-5>li{counter-increment:lst-ctn-kix_jyurzd4jvnuk-5}ol.lst-kix_wz0jpb95pupm-0.start{counter-reset:lst-ctn-kix_wz0jpb95pupm-0 0}.lst-kix_8wbl4tsmsea1-5>li{counter-increment:lst-ctn-kix_8wbl4tsmsea1-5}.lst-kix_wz0jpb95pupm-7>li{counter-increment:lst-ctn-kix_wz0jpb95pupm-7}.lst-kix_73ql7qcq5tpa-3>li{counter-increment:lst-ctn-kix_73ql7qcq5tpa-3}.lst-kix_73ql7qcq5tpa-6>li{counter-increment:lst-ctn-kix_73ql7qcq5tpa-6}ol.lst-kix_jyurzd4jvnuk-6.start{counter-reset:lst-ctn-kix_jyurzd4jvnuk-6 0}.lst-kix_taizt4vy16t3-7>li{counter-increment:lst-ctn-kix_taizt4vy16t3-7}ol.lst-kix_kha5qfkechm0-0.start{counter-reset:lst-ctn-kix_kha5qfkechm0-0 0}.lst-kix_m38g95t6y81f-3>li{counter-increment:lst-ctn-kix_m38g95t6y81f-3}ol.lst-kix_hp102ryw7avj-3.start{counter-reset:lst-ctn-kix_hp102ryw7avj-3 0}.lst-kix_vqm3flmi6t74-5>li{counter-increment:lst-ctn-kix_vqm3flmi6t74-5}.lst-kix_vqm3flmi6t74-2>li{counter-increment:lst-ctn-kix_vqm3flmi6t74-2}ol.lst-kix_hp102ryw7avj-1.start{counter-reset:lst-ctn-kix_hp102ryw7avj-1 0}ol.lst-kix_m38g95t6y81f-8{list-style-type:none}ol.lst-kix_m38g95t6y81f-5{list-style-type:none}ol.lst-kix_m38g95t6y81f-4{list-style-type:none}ol.lst-kix_m38g95t6y81f-7{list-style-type:none}ol.lst-kix_m38g95t6y81f-6{list-style-type:none}ol.lst-kix_m38g95t6y81f-1{list-style-type:none}ol.lst-kix_m38g95t6y81f-0{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-8{list-style-type:none}ol.lst-kix_m38g95t6y81f-3{list-style-type:none}ol.lst-kix_m38g95t6y81f-2{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-5{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-4{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-7{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-6{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-1{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-0{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-3{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-2{list-style-type:none}.lst-kix_taizt4vy16t3-4>li{counter-increment:lst-ctn-kix_taizt4vy16t3-4}ol.lst-kix_uet2thjh9w7v-2.start{counter-reset:lst-ctn-kix_uet2thjh9w7v-2 0}.lst-kix_8wbl4tsmsea1-2>li{counter-increment:lst-ctn-kix_8wbl4tsmsea1-2}.lst-kix_hp102ryw7avj-6>li{counter-increment:lst-ctn-kix_hp102ryw7avj-6}ol.lst-kix_wz0jpb95pupm-7.start{counter-reset:lst-ctn-kix_wz0jpb95pupm-7 0}.lst-kix_j8b5qmagvguq-1>li:before{content:"" counter(lst-ctn-kix_j8b5qmagvguq-1,lower-latin) ". "}ol.lst-kix_73ql7qcq5tpa-4.start{counter-reset:lst-ctn-kix_73ql7qcq5tpa-4 0}.lst-kix_j8b5qmagvguq-3>li:before{content:"" counter(lst-ctn-kix_j8b5qmagvguq-3,decimal) ". "}ol.lst-kix_f3p13gvgfnks-8.start{counter-reset:lst-ctn-kix_f3p13gvgfnks-8 0}.lst-kix_j8b5qmagvguq-7>li:before{content:"" counter(lst-ctn-kix_j8b5qmagvguq-7,lower-latin) ". "}.lst-kix_j8b5qmagvguq-5>li:before{content:"" counter(lst-ctn-kix_j8b5qmagvguq-5,lower-roman) ". "}.lst-kix_kha5qfkechm0-3>li{counter-increment:lst-ctn-kix_kha5qfkechm0-3}ol.lst-kix_kha5qfkechm0-3.start{counter-reset:lst-ctn-kix_kha5qfkechm0-3 0}.lst-kix_hp102ryw7avj-7>li{counter-increment:lst-ctn-kix_hp102ryw7avj-7}.lst-kix_uet2thjh9w7v-1>li:before{content:"" counter(lst-ctn-kix_uet2thjh9w7v-1,lower-latin) ". "}.lst-kix_uet2thjh9w7v-5>li:before{content:"" counter(lst-ctn-kix_uet2thjh9w7v-5,lower-roman) ". "}.lst-kix_hp102ryw7avj-0>li:before{content:"" counter(lst-ctn-kix_hp102ryw7avj-0,decimal) ". "}ol.lst-kix_8wbl4tsmsea1-0.start{counter-reset:lst-ctn-kix_8wbl4tsmsea1-0 0}.lst-kix_m38g95t6y81f-0>li:before{content:"" counter(lst-ctn-kix_m38g95t6y81f-0,decimal) ". "}.lst-kix_uet2thjh9w7v-7>li:before{content:"" counter(lst-ctn-kix_uet2thjh9w7v-7,lower-latin) ". "}.lst-kix_di30h54lh28-7>li:before{content:"\0025cb "}ol.lst-kix_taizt4vy16t3-8.start{counter-reset:lst-ctn-kix_taizt4vy16t3-8 0}.lst-kix_di30h54lh28-5>li:before{content:"\0025a0 "}ol.lst-kix_vqm3flmi6t74-1.start{counter-reset:lst-ctn-kix_vqm3flmi6t74-1 0}.lst-kix_6g1yosxwv97c-6>li:before{content:"\0025cf "}ol.lst-kix_m38g95t6y81f-5.start{counter-reset:lst-ctn-kix_m38g95t6y81f-5 0}.lst-kix_nurf0486bu14-6>li{counter-increment:lst-ctn-kix_nurf0486bu14-6}.lst-kix_uet2thjh9w7v-3>li:before{content:"" counter(lst-ctn-kix_uet2thjh9w7v-3,decimal) ". "}.lst-kix_6g1yosxwv97c-8>li:before{content:"\0025a0 "}.lst-kix_kha5qfkechm0-4>li{counter-increment:lst-ctn-kix_kha5qfkechm0-4}ul.lst-kix_di30h54lh28-1{list-style-type:none}ul.lst-kix_di30h54lh28-0{list-style-type:none}.lst-kix_m38g95t6y81f-8>li:before{content:"" counter(lst-ctn-kix_m38g95t6y81f-8,lower-roman) ". "}ul.lst-kix_8vc2vf5ikyh7-1{list-style-type:none}ul.lst-kix_8vc2vf5ikyh7-2{list-style-type:none}ul.lst-kix_8vc2vf5ikyh7-0{list-style-type:none}ul.lst-kix_di30h54lh28-7{list-style-type:none}ul.lst-kix_8vc2vf5ikyh7-5{list-style-type:none}ul.lst-kix_di30h54lh28-6{list-style-type:none}ul.lst-kix_8vc2vf5ikyh7-6{list-style-type:none}ul.lst-kix_8vc2vf5ikyh7-3{list-style-type:none}ul.lst-kix_di30h54lh28-8{list-style-type:none}.lst-kix_m38g95t6y81f-4>li:before{content:"" counter(lst-ctn-kix_m38g95t6y81f-4,lower-latin) ". "}.lst-kix_m38g95t6y81f-6>li:before{content:"" counter(lst-ctn-kix_m38g95t6y81f-6,decimal) ". "}ul.lst-kix_8vc2vf5ikyh7-4{list-style-type:none}ul.lst-kix_di30h54lh28-3{list-style-type:none}ul.lst-kix_di30h54lh28-2{list-style-type:none}ul.lst-kix_di30h54lh28-5{list-style-type:none}ul.lst-kix_8vc2vf5ikyh7-7{list-style-type:none}ul.lst-kix_di30h54lh28-4{list-style-type:none}ol.lst-kix_uet2thjh9w7v-4.start{counter-reset:lst-ctn-kix_uet2thjh9w7v-4 0}ul.lst-kix_8vc2vf5ikyh7-8{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-6.start{counter-reset:lst-ctn-kix_73ql7qcq5tpa-6 0}.lst-kix_m38g95t6y81f-2>li:before{content:"" counter(lst-ctn-kix_m38g95t6y81f-2,lower-roman) ". "}.lst-kix_f3p13gvgfnks-5>li{counter-increment:lst-ctn-kix_f3p13gvgfnks-5}.lst-kix_taizt4vy16t3-6>li:before{content:"" counter(lst-ctn-kix_taizt4vy16t3-6,decimal) ". "}.lst-kix_8wbl4tsmsea1-7>li:before{content:"" counter(lst-ctn-kix_8wbl4tsmsea1-7,lower-latin) ". "}.lst-kix_vqm3flmi6t74-1>li:before{content:"" counter(lst-ctn-kix_vqm3flmi6t74-1,lower-latin) ". "}.lst-kix_vqm3flmi6t74-5>li:before{content:"" counter(lst-ctn-kix_vqm3flmi6t74-5,lower-roman) ". "}ol.lst-kix_m38g95t6y81f-4.start{counter-reset:lst-ctn-kix_m38g95t6y81f-4 0}.lst-kix_j8b5qmagvguq-4>li{counter-increment:lst-ctn-kix_j8b5qmagvguq-4}.lst-kix_vqm3flmi6t74-0>li:before{content:"" counter(lst-ctn-kix_vqm3flmi6t74-0,decimal) ". "}.lst-kix_vqm3flmi6t74-4>li:before{content:"" counter(lst-ctn-kix_vqm3flmi6t74-4,lower-latin) ". "}ol.lst-kix_jyurzd4jvnuk-2.start{counter-reset:lst-ctn-kix_jyurzd4jvnuk-2 0}.lst-kix_taizt4vy16t3-7>li:before{content:"" counter(lst-ctn-kix_taizt4vy16t3-7,lower-latin) ". "}.lst-kix_6taojj4n6yll-6>li:before{content:"\0025cf "}.lst-kix_6taojj4n6yll-5>li:before{content:"\0025a0 "}.lst-kix_8wbl4tsmsea1-3>li:before{content:"" counter(lst-ctn-kix_8wbl4tsmsea1-3,decimal) ". "}ol.lst-kix_73ql7qcq5tpa-8.start{counter-reset:lst-ctn-kix_73ql7qcq5tpa-8 0}ol.lst-kix_f3p13gvgfnks-1.start{counter-reset:lst-ctn-kix_f3p13gvgfnks-1 0}ol.lst-kix_vqm3flmi6t74-2.start{counter-reset:lst-ctn-kix_vqm3flmi6t74-2 0}.lst-kix_8wbl4tsmsea1-4>li:before{content:"" counter(lst-ctn-kix_8wbl4tsmsea1-4,lower-latin) ". "}.lst-kix_6taojj4n6yll-2>li:before{content:"\0025a0 "}ol.lst-kix_nurf0486bu14-7.start{counter-reset:lst-ctn-kix_nurf0486bu14-7 0}.lst-kix_6taojj4n6yll-1>li:before{content:"\0025cb "}ol.lst-kix_8wbl4tsmsea1-8.start{counter-reset:lst-ctn-kix_8wbl4tsmsea1-8 0}.lst-kix_f3p13gvgfnks-3>li{counter-increment:lst-ctn-kix_f3p13gvgfnks-3}ol.lst-kix_f3p13gvgfnks-7.start{counter-reset:lst-ctn-kix_f3p13gvgfnks-7 0}.lst-kix_kha5qfkechm0-1>li{counter-increment:lst-ctn-kix_kha5qfkechm0-1}.lst-kix_taizt4vy16t3-3>li:before{content:"" counter(lst-ctn-kix_taizt4vy16t3-3,decimal) ". "}.lst-kix_73ql7qcq5tpa-1>li:before{content:"" counter(lst-ctn-kix_73ql7qcq5tpa-1,lower-latin) ". "}ol.lst-kix_f3p13gvgfnks-7{list-style-type:none}ol.lst-kix_f3p13gvgfnks-6{list-style-type:none}.lst-kix_73ql7qcq5tpa-2>li:before{content:"" counter(lst-ctn-kix_73ql7qcq5tpa-2,lower-roman) ". "}ol.lst-kix_f3p13gvgfnks-5{list-style-type:none}.lst-kix_taizt4vy16t3-2>li:before{content:"" counter(lst-ctn-kix_taizt4vy16t3-2,lower-roman) ". "}ol.lst-kix_f3p13gvgfnks-4{list-style-type:none}.lst-kix_8wbl4tsmsea1-0>li:before{content:"" counter(lst-ctn-kix_8wbl4tsmsea1-0,decimal) ". "}ol.lst-kix_f3p13gvgfnks-8{list-style-type:none}.lst-kix_73ql7qcq5tpa-5>li:before{content:"" counter(lst-ctn-kix_73ql7qcq5tpa-5,lower-roman) ". "}.lst-kix_73ql7qcq5tpa-6>li:before{content:"" counter(lst-ctn-kix_73ql7qcq5tpa-6,decimal) ". "}.lst-kix_f3p13gvgfnks-1>li{counter-increment:lst-ctn-kix_f3p13gvgfnks-1}ol.lst-kix_f3p13gvgfnks-3{list-style-type:none}ol.lst-kix_kha5qfkechm0-2.start{counter-reset:lst-ctn-kix_kha5qfkechm0-2 0}ol.lst-kix_f3p13gvgfnks-2{list-style-type:none}ol.lst-kix_f3p13gvgfnks-1{list-style-type:none}ol.lst-kix_f3p13gvgfnks-0{list-style-type:none}.lst-kix_di30h54lh28-3>li:before{content:"\0025cf "}.lst-kix_di30h54lh28-2>li:before{content:"\0025a0 "}.lst-kix_jyurzd4jvnuk-2>li{counter-increment:lst-ctn-kix_jyurzd4jvnuk-2}.lst-kix_6g1yosxwv97c-4>li:before{content:"\0025cb "}ol.lst-kix_taizt4vy16t3-1.start{counter-reset:lst-ctn-kix_taizt4vy16t3-1 0}.lst-kix_nurf0486bu14-7>li{counter-increment:lst-ctn-kix_nurf0486bu14-7}.lst-kix_6g1yosxwv97c-3>li:before{content:"\0025cf "}ol.lst-kix_nurf0486bu14-1.start{counter-reset:lst-ctn-kix_nurf0486bu14-1 0}.lst-kix_j8b5qmagvguq-2>li{counter-increment:lst-ctn-kix_j8b5qmagvguq-2}.lst-kix_vqm3flmi6t74-8>li:before{content:"" counter(lst-ctn-kix_vqm3flmi6t74-8,lower-roman) ". "}ol.lst-kix_vqm3flmi6t74-8.start{counter-reset:lst-ctn-kix_vqm3flmi6t74-8 0}.lst-kix_m38g95t6y81f-2>li{counter-increment:lst-ctn-kix_m38g95t6y81f-2}ol.lst-kix_jyurzd4jvnuk-8.start{counter-reset:lst-ctn-kix_jyurzd4jvnuk-8 0}ol.lst-kix_taizt4vy16t3-7.start{counter-reset:lst-ctn-kix_taizt4vy16t3-7 0}.lst-kix_6g1yosxwv97c-0>li:before{content:"\0025cf "}.lst-kix_8wbl4tsmsea1-8>li:before{content:"" counter(lst-ctn-kix_8wbl4tsmsea1-8,lower-roman) ". "}ol.lst-kix_jyurzd4jvnuk-7.start{counter-reset:lst-ctn-kix_jyurzd4jvnuk-7 0}ol.lst-kix_uet2thjh9w7v-6{list-style-type:none}.lst-kix_jyurzd4jvnuk-4>li{counter-increment:lst-ctn-kix_jyurzd4jvnuk-4}ol.lst-kix_uet2thjh9w7v-7{list-style-type:none}ol.lst-kix_uet2thjh9w7v-8{list-style-type:none}ol.lst-kix_uet2thjh9w7v-2{list-style-type:none}ol.lst-kix_hp102ryw7avj-3{list-style-type:none}ol.lst-kix_uet2thjh9w7v-3{list-style-type:none}ol.lst-kix_hp102ryw7avj-2{list-style-type:none}ol.lst-kix_uet2thjh9w7v-4{list-style-type:none}ol.lst-kix_hp102ryw7avj-1{list-style-type:none}ol.lst-kix_uet2thjh9w7v-5{list-style-type:none}ol.lst-kix_hp102ryw7avj-0{list-style-type:none}.lst-kix_8wbl4tsmsea1-1>li{counter-increment:lst-ctn-kix_8wbl4tsmsea1-1}ol.lst-kix_uet2thjh9w7v-0{list-style-type:none}.lst-kix_uet2thjh9w7v-3>li{counter-increment:lst-ctn-kix_uet2thjh9w7v-3}ol.lst-kix_uet2thjh9w7v-1{list-style-type:none}ol.lst-kix_f3p13gvgfnks-6.start{counter-reset:lst-ctn-kix_f3p13gvgfnks-6 0}.lst-kix_m38g95t6y81f-0>li{counter-increment:lst-ctn-kix_m38g95t6y81f-0}.lst-kix_kha5qfkechm0-8>li{counter-increment:lst-ctn-kix_kha5qfkechm0-8}ol.lst-kix_uet2thjh9w7v-6.start{counter-reset:lst-ctn-kix_uet2thjh9w7v-6 0}.lst-kix_hp102ryw7avj-2>li{counter-increment:lst-ctn-kix_hp102ryw7avj-2}.lst-kix_8wtulwd7wreh-0>li:before{content:"\0025cf "}.lst-kix_wz0jpb95pupm-6>li:before{content:"" counter(lst-ctn-kix_wz0jpb95pupm-6,decimal) ". "}.lst-kix_wz0jpb95pupm-5>li:before{content:"" counter(lst-ctn-kix_wz0jpb95pupm-5,lower-roman) ". "}ol.lst-kix_8wbl4tsmsea1-3.start{counter-reset:lst-ctn-kix_8wbl4tsmsea1-3 0}.lst-kix_8wbl4tsmsea1-8>li{counter-increment:lst-ctn-kix_8wbl4tsmsea1-8}ol.lst-kix_taizt4vy16t3-6.start{counter-reset:lst-ctn-kix_taizt4vy16t3-6 0}ol.lst-kix_f3p13gvgfnks-0.start{counter-reset:lst-ctn-kix_f3p13gvgfnks-0 0}ol.lst-kix_vqm3flmi6t74-3.start{counter-reset:lst-ctn-kix_vqm3flmi6t74-3 0}.lst-kix_wz0jpb95pupm-2>li:before{content:"" counter(lst-ctn-kix_wz0jpb95pupm-2,lower-roman) ". "}.lst-kix_nurf0486bu14-2>li{counter-increment:lst-ctn-kix_nurf0486bu14-2}.lst-kix_wz0jpb95pupm-1>li:before{content:"" counter(lst-ctn-kix_wz0jpb95pupm-1,lower-latin) ". "}.lst-kix_8wtulwd7wreh-3>li:before{content:"\0025cf "}ol.lst-kix_8wbl4tsmsea1-2.start{counter-reset:lst-ctn-kix_8wbl4tsmsea1-2 0}.lst-kix_vqm3flmi6t74-8>li{counter-increment:lst-ctn-kix_vqm3flmi6t74-8}.lst-kix_8wtulwd7wreh-4>li:before{content:"\0025cb "}ol.lst-kix_nurf0486bu14-6.start{counter-reset:lst-ctn-kix_nurf0486bu14-6 0}ol.lst-kix_hp102ryw7avj-7{list-style-type:none}ol.lst-kix_hp102ryw7avj-6{list-style-type:none}ol.lst-kix_hp102ryw7avj-5{list-style-type:none}ol.lst-kix_hp102ryw7avj-4{list-style-type:none}.lst-kix_8wtulwd7wreh-8>li:before{content:"\0025a0 "}ol.lst-kix_uet2thjh9w7v-7.start{counter-reset:lst-ctn-kix_uet2thjh9w7v-7 0}ol.lst-kix_hp102ryw7avj-8{list-style-type:none}.lst-kix_8wtulwd7wreh-7>li:before{content:"\0025cb "}ol.lst-kix_uet2thjh9w7v-8.start{counter-reset:lst-ctn-kix_uet2thjh9w7v-8 0}ul.lst-kix_6taojj4n6yll-3{list-style-type:none}.lst-kix_y42njsxzs2xp-7>li:before{content:"\0025cb "}ul.lst-kix_6taojj4n6yll-2{list-style-type:none}.lst-kix_nurf0486bu14-5>li:before{content:"" counter(lst-ctn-kix_nurf0486bu14-5,lower-roman) ". "}ul.lst-kix_6taojj4n6yll-1{list-style-type:none}ul.lst-kix_6taojj4n6yll-0{list-style-type:none}.lst-kix_kha5qfkechm0-6>li{counter-increment:lst-ctn-kix_kha5qfkechm0-6}ol.lst-kix_taizt4vy16t3-0.start{counter-reset:lst-ctn-kix_taizt4vy16t3-0 0}ul.lst-kix_6taojj4n6yll-7{list-style-type:none}ul.lst-kix_6taojj4n6yll-6{list-style-type:none}ul.lst-kix_6taojj4n6yll-5{list-style-type:none}.lst-kix_f3p13gvgfnks-8>li{counter-increment:lst-ctn-kix_f3p13gvgfnks-8}ul.lst-kix_6taojj4n6yll-4{list-style-type:none}ol.lst-kix_vqm3flmi6t74-6.start{counter-reset:lst-ctn-kix_vqm3flmi6t74-6 0}.lst-kix_y42njsxzs2xp-3>li:before{content:"\0025cf "}.lst-kix_j8b5qmagvguq-8>li:before{content:"" counter(lst-ctn-kix_j8b5qmagvguq-8,lower-roman) ". "}ol.lst-kix_nurf0486bu14-0.start{counter-reset:lst-ctn-kix_nurf0486bu14-0 0}.lst-kix_f3p13gvgfnks-7>li:before{content:"" counter(lst-ctn-kix_f3p13gvgfnks-7,lower-latin) ". "}ol.lst-kix_m38g95t6y81f-0.start{counter-reset:lst-ctn-kix_m38g95t6y81f-0 0}.lst-kix_f7i95txrvhvk-8>li:before{content:"\0025a0 "}.lst-kix_uet2thjh9w7v-1>li{counter-increment:lst-ctn-kix_uet2thjh9w7v-1}.lst-kix_f3p13gvgfnks-3>li:before{content:"" counter(lst-ctn-kix_f3p13gvgfnks-3,decimal) ". "}.lst-kix_jyurzd4jvnuk-0>li:before{content:"" counter(lst-ctn-kix_jyurzd4jvnuk-0,decimal) ". "}.lst-kix_m38g95t6y81f-7>li{counter-increment:lst-ctn-kix_m38g95t6y81f-7}ul.lst-kix_6taojj4n6yll-8{list-style-type:none}ol.lst-kix_taizt4vy16t3-3.start{counter-reset:lst-ctn-kix_taizt4vy16t3-3 0}ol.lst-kix_jyurzd4jvnuk-1.start{counter-reset:lst-ctn-kix_jyurzd4jvnuk-1 0}.lst-kix_f7i95txrvhvk-0>li:before{content:"\0025cf "}.lst-kix_kha5qfkechm0-5>li:before{content:"" counter(lst-ctn-kix_kha5qfkechm0-5,lower-roman) ". "}ol.lst-kix_f3p13gvgfnks-5.start{counter-reset:lst-ctn-kix_f3p13gvgfnks-5 0}ol.lst-kix_8wbl4tsmsea1-4.start{counter-reset:lst-ctn-kix_8wbl4tsmsea1-4 0}.lst-kix_jyurzd4jvnuk-4>li:before{content:"" counter(lst-ctn-kix_jyurzd4jvnuk-4,lower-latin) ". "}.lst-kix_jyurzd4jvnuk-8>li:before{content:"" counter(lst-ctn-kix_jyurzd4jvnuk-8,lower-roman) ". "}.lst-kix_vqm3flmi6t74-1>li{counter-increment:lst-ctn-kix_vqm3flmi6t74-1}.lst-kix_f7i95txrvhvk-4>li:before{content:"\0025cb "}ul.lst-kix_6g1yosxwv97c-8{list-style-type:none}.lst-kix_kha5qfkechm0-1>li:before{content:"" counter(lst-ctn-kix_kha5qfkechm0-1,lower-latin) ". "}ul.lst-kix_6g1yosxwv97c-7{list-style-type:none}.lst-kix_j8b5qmagvguq-0>li:before{content:"" counter(lst-ctn-kix_j8b5qmagvguq-0,decimal) ". "}ul.lst-kix_6g1yosxwv97c-6{list-style-type:none}ul.lst-kix_6g1yosxwv97c-1{list-style-type:none}.lst-kix_nurf0486bu14-4>li{counter-increment:lst-ctn-kix_nurf0486bu14-4}ul.lst-kix_6g1yosxwv97c-0{list-style-type:none}.lst-kix_j8b5qmagvguq-4>li:before{content:"" counter(lst-ctn-kix_j8b5qmagvguq-4,lower-latin) ". "}ul.lst-kix_6g1yosxwv97c-5{list-style-type:none}ul.lst-kix_6g1yosxwv97c-4{list-style-type:none}ul.lst-kix_6g1yosxwv97c-3{list-style-type:none}ul.lst-kix_6g1yosxwv97c-2{list-style-type:none}.lst-kix_wz0jpb95pupm-0>li{counter-increment:lst-ctn-kix_wz0jpb95pupm-0}ol.lst-kix_8wbl4tsmsea1-7.start{counter-reset:lst-ctn-kix_8wbl4tsmsea1-7 0}.lst-kix_nurf0486bu14-1>li:before{content:"" counter(lst-ctn-kix_nurf0486bu14-1,lower-latin) ". "}.lst-kix_uet2thjh9w7v-2>li:before{content:"" counter(lst-ctn-kix_uet2thjh9w7v-2,lower-roman) ". "}.lst-kix_uet2thjh9w7v-6>li:before{content:"" counter(lst-ctn-kix_uet2thjh9w7v-6,decimal) ". "}.lst-kix_73ql7qcq5tpa-8>li{counter-increment:lst-ctn-kix_73ql7qcq5tpa-8}.lst-kix_8wbl4tsmsea1-6>li{counter-increment:lst-ctn-kix_8wbl4tsmsea1-6}.lst-kix_vqm3flmi6t74-6>li{counter-increment:lst-ctn-kix_vqm3flmi6t74-6}.lst-kix_bav2mbt696gm-0>li:before{content:"\0025cf "}.lst-kix_73ql7qcq5tpa-1>li{counter-increment:lst-ctn-kix_73ql7qcq5tpa-1}.lst-kix_di30h54lh28-6>li:before{content:"\0025cf "}ol.lst-kix_nurf0486bu14-2.start{counter-reset:lst-ctn-kix_nurf0486bu14-2 0}ol.lst-kix_f3p13gvgfnks-2.start{counter-reset:lst-ctn-kix_f3p13gvgfnks-2 0}ol.lst-kix_jyurzd4jvnuk-4.start{counter-reset:lst-ctn-kix_jyurzd4jvnuk-4 0}.lst-kix_6g1yosxwv97c-7>li:before{content:"\0025cb "}.lst-kix_bav2mbt696gm-8>li:before{content:"\0025a0 "}.lst-kix_8vc2vf5ikyh7-1>li:before{content:"\0025cb "}ol.lst-kix_8wbl4tsmsea1-6.start{counter-reset:lst-ctn-kix_8wbl4tsmsea1-6 0}.lst-kix_bav2mbt696gm-4>li:before{content:"\0025cb "}.lst-kix_taizt4vy16t3-2>li{counter-increment:lst-ctn-kix_taizt4vy16t3-2}ol.lst-kix_vqm3flmi6t74-7.start{counter-reset:lst-ctn-kix_vqm3flmi6t74-7 0}.lst-kix_m38g95t6y81f-7>li:before{content:"" counter(lst-ctn-kix_m38g95t6y81f-7,lower-latin) ". "}ol.lst-kix_taizt4vy16t3-2.start{counter-reset:lst-ctn-kix_taizt4vy16t3-2 0}ol.lst-kix_f3p13gvgfnks-3.start{counter-reset:lst-ctn-kix_f3p13gvgfnks-3 0}.lst-kix_hp102ryw7avj-4>li{counter-increment:lst-ctn-kix_hp102ryw7avj-4}ol.lst-kix_nurf0486bu14-3.start{counter-reset:lst-ctn-kix_nurf0486bu14-3 0}.lst-kix_m38g95t6y81f-3>li:before{content:"" counter(lst-ctn-kix_m38g95t6y81f-3,decimal) ". "}ol.lst-kix_jyurzd4jvnuk-3.start{counter-reset:lst-ctn-kix_jyurzd4jvnuk-3 0}ul.lst-kix_f7i95txrvhvk-4{list-style-type:none}ul.lst-kix_f7i95txrvhvk-5{list-style-type:none}ul.lst-kix_f7i95txrvhvk-6{list-style-type:none}ul.lst-kix_f7i95txrvhvk-7{list-style-type:none}ul.lst-kix_f7i95txrvhvk-0{list-style-type:none}ol.lst-kix_f3p13gvgfnks-4.start{counter-reset:lst-ctn-kix_f3p13gvgfnks-4 0}ul.lst-kix_f7i95txrvhvk-1{list-style-type:none}ol.lst-kix_wz0jpb95pupm-6.start{counter-reset:lst-ctn-kix_wz0jpb95pupm-6 0}ul.lst-kix_f7i95txrvhvk-2{list-style-type:none}ul.lst-kix_f7i95txrvhvk-3{list-style-type:none}ul.lst-kix_f7i95txrvhvk-8{list-style-type:none}ol.lst-kix_jyurzd4jvnuk-5.start{counter-reset:lst-ctn-kix_jyurzd4jvnuk-5 0}ul.lst-kix_8wtulwd7wreh-4{list-style-type:none}ul.lst-kix_8wtulwd7wreh-3{list-style-type:none}ul.lst-kix_8wtulwd7wreh-2{list-style-type:none}ul.lst-kix_8wtulwd7wreh-1{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-5.start{counter-reset:lst-ctn-kix_73ql7qcq5tpa-5 0}ul.lst-kix_8wtulwd7wreh-0{list-style-type:none}.lst-kix_wz0jpb95pupm-5>li{counter-increment:lst-ctn-kix_wz0jpb95pupm-5}.lst-kix_8vc2vf5ikyh7-3>li:before{content:"\0025cf "}ol.lst-kix_vqm3flmi6t74-5.start{counter-reset:lst-ctn-kix_vqm3flmi6t74-5 0}.lst-kix_8vc2vf5ikyh7-5>li:before{content:"\0025a0 "}ol.lst-kix_j8b5qmagvguq-8{list-style-type:none}.lst-kix_8vc2vf5ikyh7-4>li:before{content:"\0025cb "}.lst-kix_f3p13gvgfnks-4>li{counter-increment:lst-ctn-kix_f3p13gvgfnks-4}ol.lst-kix_j8b5qmagvguq-7{list-style-type:none}.lst-kix_uet2thjh9w7v-8>li{counter-increment:lst-ctn-kix_uet2thjh9w7v-8}.lst-kix_8vc2vf5ikyh7-7>li:before{content:"\0025cb "}ol.lst-kix_hp102ryw7avj-2.start{counter-reset:lst-ctn-kix_hp102ryw7avj-2 0}.lst-kix_8vc2vf5ikyh7-6>li:before{content:"\0025cf "}.lst-kix_hp102ryw7avj-8>li{counter-increment:lst-ctn-kix_hp102ryw7avj-8}.lst-kix_8wbl4tsmsea1-7>li{counter-increment:lst-ctn-kix_8wbl4tsmsea1-7}.lst-kix_8vc2vf5ikyh7-8>li:before{content:"\0025a0 "}ol.lst-kix_j8b5qmagvguq-6{list-style-type:none}ol.lst-kix_taizt4vy16t3-4.start{counter-reset:lst-ctn-kix_taizt4vy16t3-4 0}ol.lst-kix_j8b5qmagvguq-5{list-style-type:none}ol.lst-kix_j8b5qmagvguq-4{list-style-type:none}ol.lst-kix_j8b5qmagvguq-3{list-style-type:none}ol.lst-kix_j8b5qmagvguq-2{list-style-type:none}ol.lst-kix_j8b5qmagvguq-1{list-style-type:none}ol.lst-kix_wz0jpb95pupm-1.start{counter-reset:lst-ctn-kix_wz0jpb95pupm-1 0}ol.lst-kix_j8b5qmagvguq-0{list-style-type:none}ol.lst-kix_jyurzd4jvnuk-0.start{counter-reset:lst-ctn-kix_jyurzd4jvnuk-0 0}ol.lst-kix_nurf0486bu14-5.start{counter-reset:lst-ctn-kix_nurf0486bu14-5 0}ol.lst-kix_taizt4vy16t3-5{list-style-type:none}ol.lst-kix_kha5qfkechm0-6.start{counter-reset:lst-ctn-kix_kha5qfkechm0-6 0}ol.lst-kix_taizt4vy16t3-4{list-style-type:none}ol.lst-kix_taizt4vy16t3-3{list-style-type:none}.lst-kix_kha5qfkechm0-2>li{counter-increment:lst-ctn-kix_kha5qfkechm0-2}ol.lst-kix_taizt4vy16t3-2{list-style-type:none}.lst-kix_f3p13gvgfnks-0>li{counter-increment:lst-ctn-kix_f3p13gvgfnks-0}ol.lst-kix_taizt4vy16t3-8{list-style-type:none}ol.lst-kix_taizt4vy16t3-7{list-style-type:none}ol.lst-kix_taizt4vy16t3-6{list-style-type:none}.lst-kix_j8b5qmagvguq-7>li{counter-increment:lst-ctn-kix_j8b5qmagvguq-7}.lst-kix_wz0jpb95pupm-1>li{counter-increment:lst-ctn-kix_wz0jpb95pupm-1}ol.lst-kix_m38g95t6y81f-8.start{counter-reset:lst-ctn-kix_m38g95t6y81f-8 0}ol.lst-kix_taizt4vy16t3-1{list-style-type:none}ul.lst-kix_8wtulwd7wreh-8{list-style-type:none}ol.lst-kix_taizt4vy16t3-0{list-style-type:none}ul.lst-kix_8wtulwd7wreh-7{list-style-type:none}ul.lst-kix_8wtulwd7wreh-6{list-style-type:none}ul.lst-kix_8wtulwd7wreh-5{list-style-type:none}.lst-kix_nurf0486bu14-8>li{counter-increment:lst-ctn-kix_nurf0486bu14-8}ol.lst-kix_m38g95t6y81f-1.start{counter-reset:lst-ctn-kix_m38g95t6y81f-1 0}.lst-kix_jyurzd4jvnuk-7>li{counter-increment:lst-ctn-kix_jyurzd4jvnuk-7}.lst-kix_nurf0486bu14-4>li:before{content:"" counter(lst-ctn-kix_nurf0486bu14-4,lower-latin) ". "}.lst-kix_y42njsxzs2xp-6>li:before{content:"\0025cf "}.lst-kix_vqm3flmi6t74-3>li{counter-increment:lst-ctn-kix_vqm3flmi6t74-3}.lst-kix_nurf0486bu14-2>li:before{content:"" counter(lst-ctn-kix_nurf0486bu14-2,lower-roman) ". "}.lst-kix_nurf0486bu14-6>li:before{content:"" counter(lst-ctn-kix_nurf0486bu14-6,decimal) ". "}.lst-kix_y42njsxzs2xp-4>li:before{content:"\0025cb "}.lst-kix_y42njsxzs2xp-8>li:before{content:"\0025a0 "}ol.lst-kix_j8b5qmagvguq-0.start{counter-reset:lst-ctn-kix_j8b5qmagvguq-0 0}.lst-kix_8wbl4tsmsea1-4>li{counter-increment:lst-ctn-kix_8wbl4tsmsea1-4}.lst-kix_73ql7qcq5tpa-5>li{counter-increment:lst-ctn-kix_73ql7qcq5tpa-5}.lst-kix_y42njsxzs2xp-2>li:before{content:"\0025a0 "}.lst-kix_f3p13gvgfnks-8>li:before{content:"" counter(lst-ctn-kix_f3p13gvgfnks-8,lower-roman) ". "}ol.lst-kix_uet2thjh9w7v-5.start{counter-reset:lst-ctn-kix_uet2thjh9w7v-5 0}.lst-kix_73ql7qcq5tpa-4>li{counter-increment:lst-ctn-kix_73ql7qcq5tpa-4}.lst-kix_f3p13gvgfnks-2>li:before{content:"" counter(lst-ctn-kix_f3p13gvgfnks-2,lower-roman) ". "}.lst-kix_kha5qfkechm0-5>li{counter-increment:lst-ctn-kix_kha5qfkechm0-5}.lst-kix_f7i95txrvhvk-5>li:before{content:"\0025a0 "}.lst-kix_f3p13gvgfnks-6>li:before{content:"" counter(lst-ctn-kix_f3p13gvgfnks-6,decimal) ". "}.lst-kix_nurf0486bu14-8>li:before{content:"" counter(lst-ctn-kix_nurf0486bu14-8,lower-roman) ". "}ol.lst-kix_kha5qfkechm0-1.start{counter-reset:lst-ctn-kix_kha5qfkechm0-1 0}.lst-kix_kha5qfkechm0-6>li:before{content:"" counter(lst-ctn-kix_kha5qfkechm0-6,decimal) ". "}.lst-kix_f7i95txrvhvk-7>li:before{content:"\0025cb "}.lst-kix_f3p13gvgfnks-4>li:before{content:"" counter(lst-ctn-kix_f3p13gvgfnks-4,lower-latin) ". "}.lst-kix_kha5qfkechm0-4>li:before{content:"" counter(lst-ctn-kix_kha5qfkechm0-4,lower-latin) ". "}ol.lst-kix_m38g95t6y81f-3.start{counter-reset:lst-ctn-kix_m38g95t6y81f-3 0}ol.lst-kix_jyurzd4jvnuk-4{list-style-type:none}ol.lst-kix_jyurzd4jvnuk-3{list-style-type:none}.lst-kix_f7i95txrvhvk-1>li:before{content:"\0025cb "}ol.lst-kix_73ql7qcq5tpa-7.start{counter-reset:lst-ctn-kix_73ql7qcq5tpa-7 0}ol.lst-kix_jyurzd4jvnuk-2{list-style-type:none}ol.lst-kix_j8b5qmagvguq-8.start{counter-reset:lst-ctn-kix_j8b5qmagvguq-8 0}ol.lst-kix_jyurzd4jvnuk-1{list-style-type:none}.lst-kix_jyurzd4jvnuk-5>li:before{content:"" counter(lst-ctn-kix_jyurzd4jvnuk-5,lower-roman) ". "}.lst-kix_jyurzd4jvnuk-7>li:before{content:"" counter(lst-ctn-kix_jyurzd4jvnuk-7,lower-latin) ". "}ol.lst-kix_jyurzd4jvnuk-0{list-style-type:none}.lst-kix_vqm3flmi6t74-4>li{counter-increment:lst-ctn-kix_vqm3flmi6t74-4}.lst-kix_kha5qfkechm0-0>li:before{content:"" counter(lst-ctn-kix_kha5qfkechm0-0,decimal) ". "}.lst-kix_f3p13gvgfnks-0>li:before{content:"" counter(lst-ctn-kix_f3p13gvgfnks-0,decimal) ". "}.lst-kix_jyurzd4jvnuk-1>li:before{content:"" counter(lst-ctn-kix_jyurzd4jvnuk-1,lower-latin) ". "}.lst-kix_jyurzd4jvnuk-3>li:before{content:"" counter(lst-ctn-kix_jyurzd4jvnuk-3,decimal) ". "}.lst-kix_kha5qfkechm0-2>li:before{content:"" counter(lst-ctn-kix_kha5qfkechm0-2,lower-roman) ". "}ol.lst-kix_jyurzd4jvnuk-8{list-style-type:none}ol.lst-kix_8wbl4tsmsea1-1.start{counter-reset:lst-ctn-kix_8wbl4tsmsea1-1 0}ol.lst-kix_jyurzd4jvnuk-7{list-style-type:none}ol.lst-kix_jyurzd4jvnuk-6{list-style-type:none}.lst-kix_f7i95txrvhvk-3>li:before{content:"\0025cf "}ol.lst-kix_jyurzd4jvnuk-5{list-style-type:none}ol.lst-kix_m38g95t6y81f-6.start{counter-reset:lst-ctn-kix_m38g95t6y81f-6 0}ol.lst-kix_nurf0486bu14-8.start{counter-reset:lst-ctn-kix_nurf0486bu14-8 0}.lst-kix_y42njsxzs2xp-0>li:before{content:"\0025cf "}.lst-kix_nurf0486bu14-1>li{counter-increment:lst-ctn-kix_nurf0486bu14-1}.lst-kix_nurf0486bu14-0>li:before{content:"" counter(lst-ctn-kix_nurf0486bu14-0,decimal) ". "}.lst-kix_m38g95t6y81f-5>li{counter-increment:lst-ctn-kix_m38g95t6y81f-5}.lst-kix_uet2thjh9w7v-4>li{counter-increment:lst-ctn-kix_uet2thjh9w7v-4}ol.lst-kix_wz0jpb95pupm-8.start{counter-reset:lst-ctn-kix_wz0jpb95pupm-8 0}.lst-kix_taizt4vy16t3-5>li{counter-increment:lst-ctn-kix_taizt4vy16t3-5}.lst-kix_bav2mbt696gm-3>li:before{content:"\0025cf "}.lst-kix_wz0jpb95pupm-2>li{counter-increment:lst-ctn-kix_wz0jpb95pupm-2}.lst-kix_nurf0486bu14-0>li{counter-increment:lst-ctn-kix_nurf0486bu14-0}.lst-kix_m38g95t6y81f-4>li{counter-increment:lst-ctn-kix_m38g95t6y81f-4}.lst-kix_bav2mbt696gm-1>li:before{content:"\0025cb "}ol.lst-kix_uet2thjh9w7v-3.start{counter-reset:lst-ctn-kix_uet2thjh9w7v-3 0}.lst-kix_8vc2vf5ikyh7-2>li:before{content:"\0025a0 "}.lst-kix_wz0jpb95pupm-8>li{counter-increment:lst-ctn-kix_wz0jpb95pupm-8}.lst-kix_j8b5qmagvguq-0>li{counter-increment:lst-ctn-kix_j8b5qmagvguq-0}.lst-kix_bav2mbt696gm-7>li:before{content:"\0025cb "}.lst-kix_8vc2vf5ikyh7-0>li:before{content:"\0025cf "}ol.lst-kix_kha5qfkechm0-4.start{counter-reset:lst-ctn-kix_kha5qfkechm0-4 0}.lst-kix_kha5qfkechm0-8>li:before{content:"" counter(lst-ctn-kix_kha5qfkechm0-8,lower-roman) ". "}.lst-kix_j8b5qmagvguq-6>li{counter-increment:lst-ctn-kix_j8b5qmagvguq-6}.lst-kix_bav2mbt696gm-5>li:before{content:"\0025a0 "}.lst-kix_8wbl4tsmsea1-3>li{counter-increment:lst-ctn-kix_8wbl4tsmsea1-3}ol.lst-kix_vqm3flmi6t74-0.start{counter-reset:lst-ctn-kix_vqm3flmi6t74-0 0}.lst-kix_hp102ryw7avj-1>li{counter-increment:lst-ctn-kix_hp102ryw7avj-1}.lst-kix_jyurzd4jvnuk-0>li{counter-increment:lst-ctn-kix_jyurzd4jvnuk-0}.lst-kix_jyurzd4jvnuk-6>li{counter-increment:lst-ctn-kix_jyurzd4jvnuk-6}ol.lst-kix_hp102ryw7avj-0.start{counter-reset:lst-ctn-kix_hp102ryw7avj-0 0}.lst-kix_vqm3flmi6t74-3>li:before{content:"" counter(lst-ctn-kix_vqm3flmi6t74-3,decimal) ". "}.lst-kix_taizt4vy16t3-8>li:before{content:"" counter(lst-ctn-kix_taizt4vy16t3-8,lower-roman) ". "}.lst-kix_8wbl4tsmsea1-5>li:before{content:"" counter(lst-ctn-kix_8wbl4tsmsea1-5,lower-roman) ". "}ol.lst-kix_j8b5qmagvguq-7.start{counter-reset:lst-ctn-kix_j8b5qmagvguq-7 0}.lst-kix_8wbl4tsmsea1-2>li:before{content:"" counter(lst-ctn-kix_8wbl4tsmsea1-2,lower-roman) ". "}.lst-kix_8wbl4tsmsea1-6>li:before{content:"" counter(lst-ctn-kix_8wbl4tsmsea1-6,decimal) ". "}.lst-kix_vqm3flmi6t74-7>li:before{content:"" counter(lst-ctn-kix_vqm3flmi6t74-7,lower-latin) ". "}ol.lst-kix_kha5qfkechm0-8.start{counter-reset:lst-ctn-kix_kha5qfkechm0-8 0}.lst-kix_taizt4vy16t3-4>li:before{content:"" counter(lst-ctn-kix_taizt4vy16t3-4,lower-latin) ". "}.lst-kix_6taojj4n6yll-4>li:before{content:"\0025cb "}ol.lst-kix_uet2thjh9w7v-1.start{counter-reset:lst-ctn-kix_uet2thjh9w7v-1 0}.lst-kix_vqm3flmi6t74-6>li:before{content:"" counter(lst-ctn-kix_vqm3flmi6t74-6,decimal) ". "}.lst-kix_taizt4vy16t3-5>li:before{content:"" counter(lst-ctn-kix_taizt4vy16t3-5,lower-roman) ". "}.lst-kix_uet2thjh9w7v-7>li{counter-increment:lst-ctn-kix_uet2thjh9w7v-7}.lst-kix_6taojj4n6yll-3>li:before{content:"\0025cf "}.lst-kix_taizt4vy16t3-0>li:before{content:"" counter(lst-ctn-kix_taizt4vy16t3-0,decimal) ". "}.lst-kix_taizt4vy16t3-8>li{counter-increment:lst-ctn-kix_taizt4vy16t3-8}ol.lst-kix_8wbl4tsmsea1-6{list-style-type:none}ol.lst-kix_8wbl4tsmsea1-7{list-style-type:none}ol.lst-kix_8wbl4tsmsea1-8{list-style-type:none}.lst-kix_8wbl4tsmsea1-1>li:before{content:"" counter(lst-ctn-kix_8wbl4tsmsea1-1,lower-latin) ". "}ol.lst-kix_8wbl4tsmsea1-2{list-style-type:none}.lst-kix_73ql7qcq5tpa-3>li:before{content:"" counter(lst-ctn-kix_73ql7qcq5tpa-3,decimal) ". "}.lst-kix_6taojj4n6yll-0>li:before{content:"\0025cf "}ol.lst-kix_8wbl4tsmsea1-3{list-style-type:none}ol.lst-kix_8wbl4tsmsea1-4{list-style-type:none}.lst-kix_vqm3flmi6t74-2>li:before{content:"" counter(lst-ctn-kix_vqm3flmi6t74-2,lower-roman) ". "}.lst-kix_taizt4vy16t3-1>li:before{content:"" counter(lst-ctn-kix_taizt4vy16t3-1,lower-latin) ". "}ol.lst-kix_8wbl4tsmsea1-5{list-style-type:none}.lst-kix_wz0jpb95pupm-8>li:before{content:"" counter(lst-ctn-kix_wz0jpb95pupm-8,lower-roman) ". "}.lst-kix_di30h54lh28-0>li:before{content:"\0025cf "}.lst-kix_73ql7qcq5tpa-4>li:before{content:"" counter(lst-ctn-kix_73ql7qcq5tpa-4,lower-latin) ". "}.lst-kix_di30h54lh28-1>li:before{content:"\0025cb "}.lst-kix_wz0jpb95pupm-7>li:before{content:"" counter(lst-ctn-kix_wz0jpb95pupm-7,lower-latin) ". "}.lst-kix_di30h54lh28-4>li:before{content:"\0025cb "}.lst-kix_73ql7qcq5tpa-8>li:before{content:"" counter(lst-ctn-kix_73ql7qcq5tpa-8,lower-roman) ". "}.lst-kix_uet2thjh9w7v-5>li{counter-increment:lst-ctn-kix_uet2thjh9w7v-5}.lst-kix_73ql7qcq5tpa-7>li:before{content:"" counter(lst-ctn-kix_73ql7qcq5tpa-7,lower-latin) ". "}.lst-kix_hp102ryw7avj-0>li{counter-increment:lst-ctn-kix_hp102ryw7avj-0}.lst-kix_6g1yosxwv97c-1>li:before{content:"\0025cb "}.lst-kix_6g1yosxwv97c-2>li:before{content:"\0025a0 "}.lst-kix_wz0jpb95pupm-6>li{counter-increment:lst-ctn-kix_wz0jpb95pupm-6}.lst-kix_6taojj4n6yll-7>li:before{content:"\0025cb "}ol.lst-kix_hp102ryw7avj-5.start{counter-reset:lst-ctn-kix_hp102ryw7avj-5 0}.lst-kix_taizt4vy16t3-6>li{counter-increment:lst-ctn-kix_taizt4vy16t3-6}.lst-kix_6taojj4n6yll-8>li:before{content:"\0025a0 "}ol.lst-kix_j8b5qmagvguq-2.start{counter-reset:lst-ctn-kix_j8b5qmagvguq-2 0}ol.lst-kix_kha5qfkechm0-2{list-style-type:none}ol.lst-kix_kha5qfkechm0-1{list-style-type:none}ol.lst-kix_kha5qfkechm0-0{list-style-type:none}.lst-kix_8wtulwd7wreh-2>li:before{content:"\0025a0 "}ol.lst-kix_kha5qfkechm0-6{list-style-type:none}ol.lst-kix_kha5qfkechm0-5{list-style-type:none}ol.lst-kix_kha5qfkechm0-4{list-style-type:none}.lst-kix_wz0jpb95pupm-3>li:before{content:"" counter(lst-ctn-kix_wz0jpb95pupm-3,decimal) ". "}ol.lst-kix_kha5qfkechm0-3{list-style-type:none}.lst-kix_8wtulwd7wreh-1>li:before{content:"\0025cb "}ol.lst-kix_j8b5qmagvguq-6.start{counter-reset:lst-ctn-kix_j8b5qmagvguq-6 0}.lst-kix_wz0jpb95pupm-4>li:before{content:"" counter(lst-ctn-kix_wz0jpb95pupm-4,lower-latin) ". "}ol.lst-kix_kha5qfkechm0-8{list-style-type:none}.lst-kix_taizt4vy16t3-1>li{counter-increment:lst-ctn-kix_taizt4vy16t3-1}ol.lst-kix_kha5qfkechm0-7{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-2.start{counter-reset:lst-ctn-kix_73ql7qcq5tpa-2 0}ul.lst-kix_bav2mbt696gm-4{list-style-type:none}ul.lst-kix_bav2mbt696gm-5{list-style-type:none}ul.lst-kix_bav2mbt696gm-6{list-style-type:none}ol.lst-kix_8wbl4tsmsea1-0{list-style-type:none}ul.lst-kix_bav2mbt696gm-7{list-style-type:none}ol.lst-kix_8wbl4tsmsea1-1{list-style-type:none}ul.lst-kix_bav2mbt696gm-8{list-style-type:none}ol.lst-kix_j8b5qmagvguq-1.start{counter-reset:lst-ctn-kix_j8b5qmagvguq-1 0}.lst-kix_nurf0486bu14-5>li{counter-increment:lst-ctn-kix_nurf0486bu14-5}.lst-kix_73ql7qcq5tpa-0>li:before{content:"" counter(lst-ctn-kix_73ql7qcq5tpa-0,decimal) ". "}ol.lst-kix_uet2thjh9w7v-0.start{counter-reset:lst-ctn-kix_uet2thjh9w7v-0 0}ul.lst-kix_bav2mbt696gm-0{list-style-type:none}ul.lst-kix_bav2mbt696gm-1{list-style-type:none}ol.lst-kix_kha5qfkechm0-7.start{counter-reset:lst-ctn-kix_kha5qfkechm0-7 0}ul.lst-kix_bav2mbt696gm-2{list-style-type:none}.lst-kix_73ql7qcq5tpa-0>li{counter-increment:lst-ctn-kix_73ql7qcq5tpa-0}ul.lst-kix_bav2mbt696gm-3{list-style-type:none}.lst-kix_wz0jpb95pupm-4>li{counter-increment:lst-ctn-kix_wz0jpb95pupm-4}.lst-kix_wz0jpb95pupm-0>li:before{content:"" counter(lst-ctn-kix_wz0jpb95pupm-0,decimal) ". "}.lst-kix_m38g95t6y81f-6>li{counter-increment:lst-ctn-kix_m38g95t6y81f-6}ol.lst-kix_73ql7qcq5tpa-3.start{counter-reset:lst-ctn-kix_73ql7qcq5tpa-3 0}.lst-kix_8wtulwd7wreh-5>li:before{content:"\0025a0 "}.lst-kix_8wtulwd7wreh-6>li:before{content:"\0025cf "}ol.lst-kix_wz0jpb95pupm-8{list-style-type:none}ol.lst-kix_73ql7qcq5tpa-1.start{counter-reset:lst-ctn-kix_73ql7qcq5tpa-1 0}.lst-kix_taizt4vy16t3-3>li{counter-increment:lst-ctn-kix_taizt4vy16t3-3}ol.lst-kix_wz0jpb95pupm-6{list-style-type:none}.lst-kix_nurf0486bu14-3>li:before{content:"" counter(lst-ctn-kix_nurf0486bu14-3,decimal) ". "}ol.lst-kix_wz0jpb95pupm-7{list-style-type:none}ol.lst-kix_wz0jpb95pupm-4{list-style-type:none}ol.lst-kix_wz0jpb95pupm-5{list-style-type:none}.lst-kix_y42njsxzs2xp-5>li:before{content:"\0025a0 "}ol.lst-kix_wz0jpb95pupm-2{list-style-type:none}ol.lst-kix_wz0jpb95pupm-3{list-style-type:none}ol.lst-kix_wz0jpb95pupm-0{list-style-type:none}.lst-kix_uet2thjh9w7v-0>li{counter-increment:lst-ctn-kix_uet2thjh9w7v-0}ol.lst-kix_wz0jpb95pupm-1{list-style-type:none}.lst-kix_m38g95t6y81f-8>li{counter-increment:lst-ctn-kix_m38g95t6y81f-8}.lst-kix_hp102ryw7avj-5>li{counter-increment:lst-ctn-kix_hp102ryw7avj-5}ol.lst-kix_wz0jpb95pupm-2.start{counter-reset:lst-ctn-kix_wz0jpb95pupm-2 0}ul.lst-kix_y42njsxzs2xp-3{list-style-type:none}ul.lst-kix_y42njsxzs2xp-2{list-style-type:none}ul.lst-kix_y42njsxzs2xp-1{list-style-type:none}ol.lst-kix_hp102ryw7avj-4.start{counter-reset:lst-ctn-kix_hp102ryw7avj-4 0}.lst-kix_f3p13gvgfnks-5>li:before{content:"" counter(lst-ctn-kix_f3p13gvgfnks-5,lower-roman) ". "}ul.lst-kix_y42njsxzs2xp-0{list-style-type:none}.lst-kix_f7i95txrvhvk-6>li:before{content:"\0025cf "}ul.lst-kix_y42njsxzs2xp-7{list-style-type:none}ul.lst-kix_y42njsxzs2xp-6{list-style-type:none}ul.lst-kix_y42njsxzs2xp-5{list-style-type:none}ul.lst-kix_y42njsxzs2xp-4{list-style-type:none}.lst-kix_kha5qfkechm0-7>li:before{content:"" counter(lst-ctn-kix_kha5qfkechm0-7,lower-latin) ". "}.lst-kix_jyurzd4jvnuk-8>li{counter-increment:lst-ctn-kix_jyurzd4jvnuk-8}.lst-kix_nurf0486bu14-7>li:before{content:"" counter(lst-ctn-kix_nurf0486bu14-7,lower-latin) ". "}.lst-kix_f3p13gvgfnks-7>li{counter-increment:lst-ctn-kix_f3p13gvgfnks-7}.lst-kix_nurf0486bu14-3>li{counter-increment:lst-ctn-kix_nurf0486bu14-3}ol.lst-kix_wz0jpb95pupm-5.start{counter-reset:lst-ctn-kix_wz0jpb95pupm-5 0}.lst-kix_kha5qfkechm0-3>li:before{content:"" counter(lst-ctn-kix_kha5qfkechm0-3,decimal) ". "}.lst-kix_hp102ryw7avj-3>li{counter-increment:lst-ctn-kix_hp102ryw7avj-3}.lst-kix_f7i95txrvhvk-2>li:before{content:"\0025a0 "}.lst-kix_uet2thjh9w7v-2>li{counter-increment:lst-ctn-kix_uet2thjh9w7v-2}.lst-kix_f3p13gvgfnks-1>li:before{content:"" counter(lst-ctn-kix_f3p13gvgfnks-1,lower-latin) ". "}ul.lst-kix_y42njsxzs2xp-8{list-style-type:none}.lst-kix_jyurzd4jvnuk-2>li:before{content:"" counter(lst-ctn-kix_jyurzd4jvnuk-2,lower-roman) ". "}.lst-kix_j8b5qmagvguq-2>li:before{content:"" counter(lst-ctn-kix_j8b5qmagvguq-2,lower-roman) ". "}.lst-kix_j8b5qmagvguq-8>li{counter-increment:lst-ctn-kix_j8b5qmagvguq-8}.lst-kix_y42njsxzs2xp-1>li:before{content:"\0025cb "}ol.lst-kix_j8b5qmagvguq-5.start{counter-reset:lst-ctn-kix_j8b5qmagvguq-5 0}.lst-kix_j8b5qmagvguq-6>li:before{content:"" counter(lst-ctn-kix_j8b5qmagvguq-6,decimal) ". "}.lst-kix_jyurzd4jvnuk-6>li:before{content:"" counter(lst-ctn-kix_jyurzd4jvnuk-6,decimal) ". "}.lst-kix_uet2thjh9w7v-4>li:before{content:"" counter(lst-ctn-kix_uet2thjh9w7v-4,lower-latin) ". "}ol.lst-kix_hp102ryw7avj-6.start{counter-reset:lst-ctn-kix_hp102ryw7avj-6 0}.lst-kix_73ql7qcq5tpa-2>li{counter-increment:lst-ctn-kix_73ql7qcq5tpa-2}.lst-kix_vqm3flmi6t74-0>li{counter-increment:lst-ctn-kix_vqm3flmi6t74-0}.lst-kix_m38g95t6y81f-1>li:before{content:"" counter(lst-ctn-kix_m38g95t6y81f-1,lower-latin) ". "}ol.lst-kix_wz0jpb95pupm-4.start{counter-reset:lst-ctn-kix_wz0jpb95pupm-4 0}.lst-kix_uet2thjh9w7v-0>li:before{content:"" counter(lst-ctn-kix_uet2thjh9w7v-0,decimal) ". "}.lst-kix_uet2thjh9w7v-8>li:before{content:"" counter(lst-ctn-kix_uet2thjh9w7v-8,lower-roman) ". "}.lst-kix_hp102ryw7avj-1>li:before{content:"" counter(lst-ctn-kix_hp102ryw7avj-1,lower-latin) ". "}.lst-kix_di30h54lh28-8>li:before{content:"\0025a0 "}.lst-kix_6g1yosxwv97c-5>li:before{content:"\0025a0 "}.lst-kix_73ql7qcq5tpa-7>li{counter-increment:lst-ctn-kix_73ql7qcq5tpa-7}.lst-kix_vqm3flmi6t74-7>li{counter-increment:lst-ctn-kix_vqm3flmi6t74-7}.lst-kix_bav2mbt696gm-2>li:before{content:"\0025a0 "}.lst-kix_m38g95t6y81f-1>li{counter-increment:lst-ctn-kix_m38g95t6y81f-1}ol.lst-kix_j8b5qmagvguq-3.start{counter-reset:lst-ctn-kix_j8b5qmagvguq-3 0}ol.lst-kix_73ql7qcq5tpa-0.start{counter-reset:lst-ctn-kix_73ql7qcq5tpa-0 0}.lst-kix_bav2mbt696gm-6>li:before{content:"\0025cf "}ol.lst-kix_hp102ryw7avj-7.start{counter-reset:lst-ctn-kix_hp102ryw7avj-7 0}.lst-kix_j8b5qmagvguq-3>li{counter-increment:lst-ctn-kix_j8b5qmagvguq-3}li.li-bullet-0:before{margin-left:-18pt;white-space:nowrap;display:inline-block;min-width:18pt}.lst-kix_kha5qfkechm0-7>li{counter-increment:lst-ctn-kix_kha5qfkechm0-7}ol.lst-kix_wz0jpb95pupm-3.start{counter-reset:lst-ctn-kix_wz0jpb95pupm-3 0}.lst-kix_8wbl4tsmsea1-0>li{counter-increment:lst-ctn-kix_8wbl4tsmsea1-0}.lst-kix_m38g95t6y81f-5>li:before{content:"" counter(lst-ctn-kix_m38g95t6y81f-5,lower-roman) ". "}.lst-kix_f3p13gvgfnks-2>li{counter-increment:lst-ctn-kix_f3p13gvgfnks-2}.lst-kix_jyurzd4jvnuk-3>li{counter-increment:lst-ctn-kix_jyurzd4jvnuk-3}ol{margin:0;padding:0}table td,table th{padding:0}.c2{margin-left:36pt;padding-top:0pt;padding-left:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c8{color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c0{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left;height:11pt}.c1{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c24{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:center}.c7{font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c6{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c21{color:#000000;font-weight:400;vertical-align:baseline;font-size:11pt;font-family:"Arial"}.c20{text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c4{background-color:#ffffff;vertical-align:sub;color:#222222}.c17{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c3{background-color:#ffffff;color:#222222;font-weight:700}.c14{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;text-decoration:underline}.c12{padding:0;margin:0}.c5{background-color:#ffffff;color:#222222}.c10{margin-left:72pt;padding-left:0pt}.c15{margin-left:144pt;padding-left:0pt}.c9{margin-left:108pt;padding-left:0pt}.c11{color:inherit;text-decoration:inherit}.c16{color:#1155cc}.c13{font-style:italic}.c23{font-style:normal}.c19{background-color:#ffffff}.c22{vertical-align:super}.c18{font-weight:700}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style>
</head>
<body class="c17 doc-content">
<p class="c24">
<span class="c8">Proxy Cost Computation in Circuit Training</span>
</p>
<p class="c0">
<span class="c8">
</span>
</p>
<p class="c6">
<span class="c5">In Circuit Training, </span>
<span class="c5 c13">p</span>
<span class="c5 c13">roxy cost</span>
<span class="c7 c5">&nbsp;is the weighted sum of wirelength, density, and congestion costs. It is used to determine the overall quality of the macro placement solution. </span>
</p>
<p class="c0">
<span class="c7 c5">
</span>
</p>
<p class="c6">
<img src="images/image1.png">
<img src="images/image2.png">
</p>
<p class="c6">
<span class="c5">Where </span>
<span class="c5">w</span>
<span class="c4">wirelength</span>
<span class="c5">, </span>
<span class="c5">w</span>
<span class="c4">density</span>
<span class="c5">&nbsp;and </span>
<span class="c5">w</span>
<span class="c4">congestion</span>
<span class="c5">&nbsp;are the weights. From the </span>
<span class="c14 c16 c19">
<a class="c11" href="https://www.google.com/url?q=https://github.com/google-research/circuit_training/blob/9e7097fa0c2a82030f43b298259941fc8ca6b7ae/circuit_training/environment/environment.py%23L61-L65&amp;sa=D&amp;source=editors&amp;ust=1663567364363272&amp;usg=AOvVaw0S9jYHB_cGUS8EoaQ63Wwq">Circuit Training repo</a>
</span>
<span class="c5">, we found that w</span>
<span class="c4">wirelength</span>
<span class="c5">=1, </span>
<span class="c5">w</span>
<span class="c4">density</span>
<span class="c5">= 1, and </span>
<span class="c5">w</span>
<span class="c4">congestion</span>
<span class="c5">= 0.5. From communication with Google engineers, we learned that in their internal flow, they use w</span>
<span class="c4">wirelength</span>
<span class="c5">=1, </span>
<span class="c5">w</span>
<span class="c4">density</span>
<span class="c5">= 0.5, and </span>
<span class="c5">w</span>
<span class="c4">congestion</span>
<span class="c7 c5">= 0.5. </span>
</p>
<p class="c0">
<span class="c7 c5">
</span>
</p>
<p class="c6">
<span class="c5">CircuitTraining repo provides the plc_wrapper_main binary to compute these cost functions. There is no available detailed description, or open-source implementation, of these cost functions. With feedback and confirmations from Google engineers, we have implemented all three cost functions; the source code is available </span>
<span class="c14 c16 c19">
<a class="c11" href="https://www.google.com/url?q=https://github.com/TILOS-AI-Institute/MacroPlacement/blob/main/CodeElements/Plc_client/plc_client_os.py&amp;sa=D&amp;source=editors&amp;ust=1663567364364175&amp;usg=AOvVaw0xArIrXjgDiC9vWiA95TI0">here</a>
</span>
<span class="c7 c5">. In the following section we provide a detailed description of the implementation of these cost functions.</span>
</p>
<p class="c0">
<span class="c7 c5">
</span>
</p>
<p class="c6">
<span class="c20 c3">Wirelength cost computation:</span>
</p>
<p class="c6">
<span class="c7 c5">The wirelength cost function depends on the net (bounding box) half-perimeter wirelength (HPWL). So, first we describe steps to compute HPWL of a net &ndash; and then we compute the wirelength cost.</span>
</p>
<p class="c0">
<span class="c7 c5">
</span>
</p>
<p class="c6">
<span class="c20 c3">Procedure to compute net HPWL: </span>
</p>
<ol class="c12 lst-kix_73ql7qcq5tpa-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c5">Initialize x</span>
<span class="c4">min</span>
<span class="c5">&nbsp;= float_max, y</span>
<span class="c4">min</span>
<span class="c5">&nbsp;= float_max and x</span>
<span class="c4">max</span>
<span class="c5">&nbsp;= 0, y</span>
<span class="c4">max</span>
<span class="c7 c5">&nbsp;= 0.</span>
</li>
<li class="c2 li-bullet-0">
<span class="c7 c5">For each node in net:</span>
</li>
</ol>
<ol class="c12 lst-kix_73ql7qcq5tpa-1 start" start="1">
<li class="c6 c10 li-bullet-0">
<span class="c5">x</span>
<span class="c4">min</span>
<span class="c5">&nbsp;= min(x</span>
<span class="c4">min</span>
<span class="c5">, node-&gt;x), y</span>
<span class="c4">min</span>
<span class="c5">&nbsp;= min(y</span>
<span class="c4">min</span>
<span class="c5 c7">, node-&gt;y)</span>
</li>
<li class="c6 c10 li-bullet-0">
<span class="c5">x</span>
<span class="c4">max</span>
<span class="c5">&nbsp;= max(x</span>
<span class="c4">max</span>
<span class="c5">, node-&gt;x), y</span>
<span class="c4">max</span>
<span class="c5">&nbsp;= max(y</span>
<span class="c4">max</span>
<span class="c7 c5">, node-&gt;y)</span>
</li>
</ol>
<ol class="c12 lst-kix_73ql7qcq5tpa-0" start="3">
<li class="c2 li-bullet-0">
<span class="c5">net_hpwl = &nbsp;(x</span>
<span class="c4">max</span>
<span class="c5">&nbsp;- x</span>
<span class="c4">min</span>
<span class="c5">) + (y</span>
<span class="c4">max</span>
<span class="c5">&nbsp;- y</span>
<span class="c4">min</span>
<span class="c7 c5">)</span>
</li>
</ol>
<p class="c0">
<span class="c7 c5">
</span>
</p>
<p class="c6">
<span class="c5">A protobuf netlist consists of different types of nodes. Different possible types of nodes are macro, standard cell, macro pin and port. A net consists of one source node and one or more sink nodes. A net can have only standard cell, macro pin and port as its source or sink nodes. In the following wirelength cost computation procedure, we use the term </span>
<span class="c5 c13">net weight</span>
<span class="c5">,</span>
<span class="c5">&nbsp;which is the weight of the </span>
<span class="c14 c5">source node</span>
<span class="c7 c5">&nbsp;of the net. This weight indicates the total number of connections between the source and each sink node. </span>
</p>
<p class="c0">
<span class="c7 c5">
</span>
</p>
<p class="c6">
<span class="c3 c20">Procedure to compute wirelength cost:</span>
</p>
<ol class="c12 lst-kix_taizt4vy16t3-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c7 c5">hpwl = 0, net_count = 0</span>
</li>
<li class="c2 li-bullet-0">
<span class="c7 c5">For each net:</span>
</li>
</ol>
<ol class="c12 lst-kix_taizt4vy16t3-1 start" start="1">
<li class="c6 c10 li-bullet-0">
<span class="c7 c5">hpwl += net-&gt;weight * net_hpwl</span>
</li>
<li class="c6 c10 li-bullet-0">
<span class="c7 c5">net_count += net-&gt;weight.</span>
</li>
</ol>
<ol class="c12 lst-kix_taizt4vy16t3-0" start="3">
<li class="c2 li-bullet-0">
<span class="c7 c5">wirelength cost = hpwl/(net_count * (canvas_height + canvas_width))</span>
</li>
</ol>
<p class="c0">
<span class="c7 c5">
</span>
</p>
<p class="c6">
<span class="c7 c5">In the above procedure, canvas_height is the height of the canvas and canvas_width is the width of the canvas.</span>
</p>
<p class="c0">
<span class="c7 c5">
</span>
</p>
<p class="c6">
<span class="c3">Density cost computation:</span>
</p>
<p class="c6">
<span class="c1">Density cost function depends on the gridcell density. So, first we describe the steps to compute gridcell density &ndash; and then we compute the density cost.</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c1">The gridcell density of grid (i, j) is the ratio of the summation of all the overlapped areas (the common area between the node and the grid) of standard cell and macro nodes with the grid (i, j) to the total gridcell area.</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c8">Procedure to compute density cost:</span>
</p>
<ol class="c12 lst-kix_j8b5qmagvguq-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c1">n =number of rows * number of columns.</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">k = floor(n*0.1)</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">If k == 0</span>
</li>
</ol>
<ol class="c12 lst-kix_j8b5qmagvguq-1 start" start="1">
<li class="c6 c10 li-bullet-0">
<span class="c1">k = 1</span>
</li>
</ol>
<ol class="c12 lst-kix_j8b5qmagvguq-0" start="4">
<li class="c2 li-bullet-0">
<span class="c1">Density cost = (average density of top k densest gridcells) * 0.5.</span>
</li>
</ol>
<p class="c0">
<span class="c8">
</span>
</p>
<p class="c6">
<span>Notice that 0.5 is not the &ldquo;weight&rdquo; of this cost function, but simply another factor applied besides the weight factor from the cost function. Google engineers informed us &ldquo; the 0.5 is there to correct the </span>
<span class="c14 c16">
<a class="c11" href="https://www.google.com/url?q=https://github.com/google-research/circuit_training/blob/9e7097fa0c2a82030f43b298259941fc8ca6b7ae/circuit_training/grouping/grouping.py%23L370&amp;sa=D&amp;source=editors&amp;ust=1663567364367750&amp;usg=AOvVaw2-k4jjfubAAwD7CZGZeyft">bloating of the std cell clusters</a>
</span>
<span class="c1">&rdquo;.</span>
</p>
<p class="c0">
<span class="c8">
</span>
</p>
<a id="kix.ke5yvwxwz23v">
</a>
<p class="c6">
<span class="c18">Congestion cost </span>
<span class="c18">computation</span>
<span class="c8">:</span>
</p>
<p class="c6">
<span class="c1">We divide the congestion cost computation into six sub-stages:</span>
</p>
<ol class="c12 lst-kix_uet2thjh9w7v-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c14 c16">
<a class="c11" href="#kix.vz68r6b84tl6">Compute horizontal and vertical congestion of each grid due to net routing.</a>
</span>
</li>
<li class="c2 li-bullet-0">
<span class="c14 c16">
<a class="c11" href="#kix.2vjgmooqq2ri">Apply smoothing only to grid congestion due to net routing.</a>
</span>
</li>
<li class="c2 li-bullet-0">
<span class="c14 c16">
<a class="c11" href="#kix.cmfsmmjct5gp">Compute congestion of each grid due to macros. When a module overlaps with multiple gridcells, if any part of the module partially overlaps with the gridcell (either vertically, or horizontally), we set the top row (if vertical) or right column (if horizontal) to 0. </a>
</span>
</li>
<li class="c2 li-bullet-0">
<span class="c18">Grid horizontal congestion</span>
<span class="c1">&nbsp;= horizontal congestion due to macros + horizontal congestion due to net routing after smoothing. </span>
</li>
<li class="c2 li-bullet-0">
<span class="c18">Grid vertical congestion</span>
<span class="c1">&nbsp;= vertical congestion due to macros + vertical congestion due to net routing after smoothing.</span>
</li>
<li class="c2 li-bullet-0">
<span class="c14 c16">
<a class="c11" href="#id.mv122dawrylu">Finally, we concatenate the </a>
</span>
<span class="c14 c16 c18">
<a class="c11" href="#id.mv122dawrylu">Grid horizontal congestion</a>
</span>
<span class="c14 c16">
<a class="c11" href="#id.mv122dawrylu">&nbsp;array and the </a>
</span>
<span class="c14 c16 c18">
<a class="c11" href="#id.mv122dawrylu">Grid vertical congestion</a>
</span>
<span class="c14 c16">
<a class="c11" href="#id.mv122dawrylu">&nbsp;array</a>
</span>
<span class="c14 c16 c18">
<a class="c11" href="#id.mv122dawrylu">&nbsp;</a>
</span>
<span class="c14 c16">
<a class="c11" href="#id.mv122dawrylu">and take the average of the top </a>
</span>
<span class="c14 c16 c18">
<a class="c11" href="#id.mv122dawrylu">5%</a>
</span>
<span class="c14 c16">
<a class="c11" href="#id.mv122dawrylu">&nbsp;of the concatenated list.</a>
</span>
</li>
</ol>
<p class="c0">
<span class="c1">
</span>
</p>
<a id="kix.vz68r6b84tl6">
</a>
<p class="c6">
<span class="c21 c14 c23">Computation of grid congestion due to net routing:</span>
</p>
<p class="c6">
<span class="c1">We divide this problem into three sub-problems:</span>
</p>
<ol class="c12 lst-kix_vqm3flmi6t74-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c1">Congestion due to two-pin nets.</span>
</li>
<li class="c2 li-bullet-0">
<span>Congestion due to three-pin nets.</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">Congestion due to multi-pin nets where the number of pins is greater than three.</span>
</li>
</ol>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span>A grid location (i, j) is the intersection of the i</span>
<span class="c22">th</span>
<span>&nbsp;column with the j</span>
<span class="c22">th</span>
<span class="c1">&nbsp;row.</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c1">For these three problems we consider that the horizontal routing cost due to a net-segment from (i, j) grid to (i+1, j) grid applies only to the grid (i, j). Similarly the vertical routing cost due to a net-segment from (i,j) grid to (i, j+1) grid applies only to the grid (i,j). Here the direction of the net does not matter. </span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c1">Now we compute the congestion due to different nets:</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c21 c14 c13">Congestion due to two-pin nets:</span>
</p>
<p class="c6">
<span class="c1">Two-pin net routing depends on the source and sink node. Consider </span>
</p>
<ol class="c12 lst-kix_kha5qfkechm0-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c1">Source node is (i1, j1)</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">Sink node is (i2, j2)</span>
</li>
</ol>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c8">Procedure for congestion computation due to two-pin nets:</span>
</p>
<ol class="c12 lst-kix_wz0jpb95pupm-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c1">imin = min(i1, i2), imax = max(i1, i2)</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">w = net weight</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">Add horizontal congestion cost (considering weight w) due this net to grids from (imin, j1) to (imax-1, j1).</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">jmin = min(j1, j2), jmax = max(j1, j2)</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">Add vertical congestion cost (considering weight w) due to this net to grids from (i2, jmin) to (i2, jmax - 1).</span>
</li>
</ol>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span>In the following figure P2 is the source pin and P1 is </span>
<span>the </span>
<span class="c1">sink pin of the net. When the arrow crosses the top edge of the grid cell it contributes to the vertical congestion cost of the grid cell and when it crosses the right edge of the grid cell it contributes to the horizontal congestion cost of the grid cell.</span>
</p>
<p class="c6">
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 534.81px; height: 257.98px;">
<img alt="" src="images/image14.png" style="width: 534.81px; height: 257.98px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c14 c13 c21">Congestion due to three-pin nets:</span>
</p>
<p class="c6">
<span class="c1">Congestion cost of three-pin nets does not change when the locations of the pins are interchanged.</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c1">In the following figure, P3 is the source and P1 and P2 are the sinks. We see that interchanging the position does not change the route.</span>
</p>
<p class="c6">
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 526.50px; height: 254.38px;">
<img alt="" src="images/image13.png" style="width: 526.50px; height: 254.38px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
</p>
<p class="c6">
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 523.50px; height: 254.20px;">
<img alt="" src="images/image10.png" style="width: 523.50px; height: 254.20px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
</p>
<p class="c6">
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 518.50px; height: 251.77px;">
<img alt="" src="images/image7.png" style="width: 518.50px; height: 251.77px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c1">Consider the three pin locations are (i1, j1), (i2, j2) and (i3, j3).</span>
</p>
<p class="c6">
<span class="c1">We compute congestion due to three-pins using two functions:</span>
</p>
<ol class="c12 lst-kix_8wbl4tsmsea1-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c1">L_routing</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">T_routing </span>
</li>
</ol>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c1">In the below function all congestion cost computation takes into account the weight.</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c1">First we describe these two functions and then we describe how the congestion due to three pin nets are computed.</span>
</p>
<p class="c6">
<span class="c8">Congestion cost update using L_routing:</span>
</p>
<p class="c6">
<span class="c1">The inputs are three pin grid id and net weight. We consider pin grids are &nbsp;(i1, j1), (i2, j2) and (i3, j3) where i1 &lt; i2 &lt; i3 and (j1 &lt; j2 &lt; j3) or (j1 &gt; j2 &gt; j3).</span>
</p>
<ol class="c12 lst-kix_hp102ryw7avj-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c1">Add horizontal congestion cost due to the net to grids from (i1, j1) to (i2-1, j1)</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">Add horizontal congestion cost due to the net to grids from (i2, j2) to (i3-1, j2)</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">Add vertical congestion cost due to the net to grids from (i2, min(j1, j2)) to (i2, max(j1, j2) - 1).</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">Add vertical congestion cost due to the net to grids from (i3, min(j2, j3)) to (i3, max(j2, j3) - 1).</span>
</li>
</ol>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c18">Congestion cost update using T_routing</span>
<span class="c1">:</span>
</p>
<p class="c6">
<span class="c1">The inputs are three pin grid id and net weight. We consider pin grids as (i1, j1), (i2, j2) and (i3, j3) where (j1 &lt;= j2 &lt;= j3 ) or (j1 &gt;= j2 &gt;= j3).</span>
</p>
<ol class="c12 lst-kix_m38g95t6y81f-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c1">imin = min(i1, i2, i3), imax = max(i1, i2, i3)</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">Add horizontal congestion cost due to the net to grids from (imin, j2) to (imax - 1, j2).</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">Add vertical congestion cost due to the net to the grid from (i1, min(j1, j2)) to (i1, max(j1, j2) - 1).</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">Add vertical congestion cost due to the net to the grid from (i3, min(j2, j3)) to (i3, max(j2, j3) - 1).</span>
</li>
</ol>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c8">Procedure congestion cost computation due to three-pin nets:</span>
</p>
<p class="c6">
<span class="c1">The inputs are three pin grid locations and the net weight.</span>
</p>
<ol class="c12 lst-kix_nurf0486bu14-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c1">Sort the pin based on the column. After sorting pin locations are (i1, j1), (i2, j2) and (i3, j3). As it is sorted based on column i1 &lt;= i2 &lt;= i3.</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">&nbsp;If i1 &lt; i2 and i2 &lt; i3 and min(j1, j3) &lt; j2 and max(j1, j3) &gt; j2:</span>
</li>
</ol>
<ol class="c12 lst-kix_nurf0486bu14-1 start" start="1">
<li class="c6 c10 li-bullet-0">
<span class="c1">Update congestion cost using L_routing.</span>
</li>
<li class="c6 c10 li-bullet-0">
<span class="c1">Return.</span>
</li>
</ol>
<ol class="c12 lst-kix_nurf0486bu14-0" start="3">
<li class="c2 li-bullet-0">
<span class="c1">If i2 == i3 and i1 &lt; i2 and j1 &lt; min(j2, j3):</span>
</li>
</ol>
<ol class="c12 lst-kix_nurf0486bu14-1 start" start="1">
<li class="c6 c10 li-bullet-0">
<span class="c1">Add horizontal congestion cost due to the net to grids from (i1, j1) to (i2-1, j1)</span>
</li>
<li class="c6 c10 li-bullet-0">
<span class="c1">Add vertical congestion cost due to the net to grids from (i2, j1) to (i2, max(j2, j3) -1)</span>
</li>
<li class="c6 c10 li-bullet-0">
<span class="c1">Return.</span>
</li>
</ol>
<ol class="c12 lst-kix_nurf0486bu14-0" start="4">
<li class="c2 li-bullet-0">
<span class="c1">If j2 == j3:</span>
</li>
</ol>
<ol class="c12 lst-kix_nurf0486bu14-1 start" start="1">
<li class="c6 c10 li-bullet-0">
<span class="c1">Add horizontal congestion cost due to the net to grids from (i1, j1) to (i2 -1, j1)</span>
</li>
<li class="c6 c10 li-bullet-0">
<span class="c1">Add horizontal congestion cost due to the net to grids from (i2, j2) to (i3 -1, j2)</span>
</li>
<li class="c6 c10 li-bullet-0">
<span class="c1">Add vertical congestion cost due to the net to grids from (i2, min(j2, j3)) to (i2, max(j2, j3) - 1).</span>
</li>
<li class="c6 c10 li-bullet-0">
<span class="c1">Return</span>
</li>
</ol>
<ol class="c12 lst-kix_nurf0486bu14-0" start="5">
<li class="c2 li-bullet-0">
<span class="c1">Update congestion cost using T_routing.</span>
</li>
</ol>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c1">The following four figures represent the four cases mentioned in the above procedure from point two to point five.</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c1">&nbsp; &nbsp;Figure corresponding to point two. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Figure corresponding to point three.</span>
</p>
<p class="c6">
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 279.46px; height: 273.60px;">
<img alt="" src="images/image9.png" style="width: 279.46px; height: 273.60px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 278.96px; height: 273.36px;">
<img alt="" src="images/image5.png" style="width: 278.96px; height: 273.36px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c1">&nbsp; &nbsp;Figure corresponding to point three. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Figure corresponding to point five.</span>
</p>
<p class="c6">
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 279.46px; height: 273.60px;">
<img alt="" src="images/image4.png" style="width: 279.46px; height: 273.60px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
<span>&nbsp;</span>
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 273.60px; height: 273.60px;">
<img alt="" src="images/image11.png" style="width: 273.60px; height: 273.60px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span class="c13 c14">Congestion due to multi-pin nets where the number of pins is greater than three:</span>
</p>
<ol class="c12 lst-kix_f3p13gvgfnks-0 start" start="1">
<li class="c2 li-bullet-0">
<span class="c1">Consider the net is a n-pin net where n &gt; 3. </span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">We break this net into n-1 two pin nets where the source node is the common node.</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">For each two pin nets we update congestion values.</span>
</li>
</ol>
<p class="c0">
<span class="c1">
</span>
</p>
<a id="kix.2vjgmooqq2ri">
</a>
<p class="c6">
<span class="c21 c14 c23">Computation for Smoothing:</span>
</p>
<ul class="c12 lst-kix_di30h54lh28-0 start">
<li class="c2 li-bullet-0">
<span class="c8">Congestion smoothing = 0.0</span>
</li>
</ul>
<ul class="c12 lst-kix_di30h54lh28-1 start">
<li class="c6 c10 li-bullet-0">
<span class="c1">Return the grid congestion that is due to net routing: no smoothing is applied.</span>
</li>
</ul>
<ul class="c12 lst-kix_di30h54lh28-0">
<li class="c2 li-bullet-0">
<span class="c18">Congestion smoothing &gt; 0.0 = k</span>
<span>&nbsp;(k is an integer; both CT and our code appear to use the floor of any non-integer </span>
<span class="c13">smoothing </span>
<span class="c1">value)</span>
</li>
</ul>
<ul class="c12 lst-kix_di30h54lh28-1 start">
<li class="c6 c10 li-bullet-0">
<span class="c1">Take grid congestion due to net routing</span>
</li>
<li class="c6 c10 li-bullet-0">
<span class="c1">For horizontal grid congestion</span>
</li>
</ul>
<ul class="c12 lst-kix_di30h54lh28-2 start">
<li class="c6 c9 li-bullet-0">
<span class="c1">For each gridcell</span>
</li>
</ul>
<ul class="c12 lst-kix_di30h54lh28-3 start">
<li class="c6 c15 li-bullet-0">
<span class="c1">If not out-of-bound, take k gridcells on each side (left/right), divide the current cell entry by the total number of gridcells taken and add the value to the corresponding gridcell.</span>
</li>
</ul>
<ul class="c12 lst-kix_di30h54lh28-1">
<li class="c6 c10 li-bullet-0">
<span class="c1">For vertical grid congestion</span>
</li>
</ul>
<ul class="c12 lst-kix_di30h54lh28-2 start">
<li class="c6 c9 li-bullet-0">
<span class="c1">For each gridcell</span>
</li>
</ul>
<ul class="c12 lst-kix_di30h54lh28-3 start">
<li class="c6 c15 li-bullet-0">
<span class="c1">If not out-of-bound, take k gridcells on each side (up/down), divide the current cell entry by the total number of gridcells taken and add the value to the corresponding gridcell.</span>
</li>
</ul>
<ul class="c12 lst-kix_di30h54lh28-1">
<li class="c6 c10 li-bullet-0">
<span>For example, suppose that </span>
<span class="c13">smoothing </span>
<span class="c1">= 2 (default value), and we apply it to horizontal grid congestion in four rows of gridcells with respect to the red gridcell highlighted in each row. Then, the blue gridcells in each row show the numbers of gridcells that we divide by (respectively from the top row to the bottom row: &nbsp;3, 4, 5, 4) when smoothing congestion.</span>
</li>
</ul>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c6">
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 288.00px; height: 234.72px;">
<img alt="" src="images/image3.png" style="width: 288.00px; height: 234.72px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
<a id="kix.cmfsmmjct5gp">
</a>
<p class="c6">
<span class="c21 c14 c23">Computation for Macro Congestion:</span>
</p>
<ul class="c12 lst-kix_8wtulwd7wreh-0 start">
<li class="c2 li-bullet-0">
<span class="c1">For each soft macro + hard MACRO:</span>
</li>
</ul>
<ul class="c12 lst-kix_8wtulwd7wreh-1 start">
<li class="c6 c10 li-bullet-0">
<span class="c1">For each gridcell it overlaps with:</span>
</li>
</ul>
<ul class="c12 lst-kix_8wtulwd7wreh-2 start">
<li class="c6 c9 li-bullet-0">
<span class="c1">For both horizontal and vertical macro routing congestion map:</span>
</li>
</ul>
<ul class="c12 lst-kix_8wtulwd7wreh-3 start">
<li class="c6 c15 li-bullet-0">
<span class="c1">Find the dimension of overlap, multiply by macro routing allocation</span>
</li>
<li class="c6 c15 li-bullet-0">
<span class="c1">Divide by (the grid_cell dimension multiplied by routing per micron)</span>
</li>
<li class="c6 c15 li-bullet-0">
<span class="c1">Add to the corresponding gridcell</span>
</li>
</ul>
<ul class="c12 lst-kix_8wtulwd7wreh-0">
<li class="c2 li-bullet-0">
<span class="c1">Example:</span>
</li>
</ul>
<ul class="c12 lst-kix_8wtulwd7wreh-1 start">
<li class="c6 c10 li-bullet-0">
<span>Given a </span>
<span>single hard macro HM_1</span>
<span class="c1">&nbsp;(pink rectangle in the figure below), we have two pins instantiated on the top-right and bottom-left, driven by the ports at &ldquo;P_1&rdquo; located at the bottom-left of the canvas.</span>
</li>
<li class="c6 c10 li-bullet-0">
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 288.00px; height: 300.48px;">
<img alt="" src="images/image8.png" style="width: 288.00px; height: 300.48px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
</li>
<li class="c6 c10 li-bullet-0">
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 288.00px; height: 331.20px;">
<img alt="" src="images/image6.png" style="width: 288.00px; height: 331.20px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
</li>
<li class="c6 c10 li-bullet-0">
<span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 288.00px; height: 300.48px;">
<img alt="" src="images/image12.png" style="width: 288.00px; height: 300.48px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title="">
</span>
</li>
<li class="c6 c10 li-bullet-0">
<span class="c1">Whenever there are gridcells partially overlapped, whether in horizontal or vertical direction, we set the vertical congestion of the top gridcells to 0 (if partially overlapped vertically) and we set the horizontal congestion of the right gridcells to 0 (if partially overlapped horizontally).</span>
</li>
</ul>
<p class="c0">
<span class="c1">
</span>
</p>
<a id="id.mv122dawrylu">
</a>
<p class="c6">
<span class="c21 c14 c23">Computation of the final congestion cost:</span>
</p>
<ul class="c12 lst-kix_y42njsxzs2xp-0 start">
<li class="c2 li-bullet-0">
<span class="c1">Adding the Macro allocation congestion and Net routing congestion together for both Vertical and Horizontal congestion map</span>
</li>
<li class="c2 li-bullet-0">
<span class="c1">Concat both vertical and horizontal congestion maps together.</span>
</li>
<li class="c2 li-bullet-0">
<span>Take the top </span>
<span class="c18">5%</span>
<span>&nbsp;of the most congested gridcells </span>
<span class="c18">in the concatenation</span>
<span class="c1">, and average them out to get the final congestion cost. &nbsp;</span>
</li>
</ul>
<p class="c0">
<span class="c1">
</span>
</p>
<p class="c0">
<span class="c1">
</span>
</p>
</body>
</html>
# Links to Our Documents # Links to Our Documents
[Our Progress](./OurProgress/) [Our Progress](./OurProgress/)
[Proxy Cost]() [Proxy Cost](./ProxyCost/)
# **MacroPlacement** # **MacroPlacement**
**MacroPlacement** is an open, transparent effort to provide a public, baseline implementation of [Google Brain's Circuit Training](https://github.com/google-research/circuit_training) (Morpheus) deep RL-based placement method. We will provide (1) testcases in open enablements, along with multiple EDA tool flows; (2) implementations of missing or binarized elements of Circuit Training; (3) reproducible example macro placement solutions produced by our implementation; and (4) post-routing results obtained by full completion of the synthesis-place-and-route flow using both proprietary and open-source tools. **MacroPlacement** is an open, transparent effort to provide a public, baseline implementation of [Google Brain's Circuit Training](https://github.com/google-research/circuit_training) (Morpheus) deep RL-based placement method. We will provide (1) testcases in open enablements, along with multiple EDA tool flows; (2) implementations of missing or binarized elements of Circuit Training; (3) reproducible example macro placement solutions produced by our implementation; and (4) post-routing results obtained by full completion of the synthesis-place-and-route flow using both proprietary and open-source tools.
## **Important links**
- In [our progress](https://tilos-ai-institute.github.io/MacroPlacement/Docs/OurProgress/) documentation you can find the latest updates.
- The [proxy cost](https://tilos-ai-institute.github.io/MacroPlacement/Docs/ProxyCost/) documentation contains implementation details of wirelength, density and congestion cost that [Circuit Trainig](https://github.com/google-research/circuit_training) is using.
## **Table of Contents** ## **Table of Contents**
<!-- - [Reproducible Example Solutions](#reproducible-example-solutions) --> <!-- - [Reproducible Example Solutions](#reproducible-example-solutions) -->
- [Testcases](#testcases) contains open-source designs such as Ariane, MemPool and NVDLA. - [Testcases](#testcases) contains open-source designs such as Ariane, MemPool and NVDLA.
- [Enablements](#enablements) contains PDKs for open-source enablements such as NanGate45, ASAP7 and SKY130HD with FakeStack. Memories required by the designs are also included. - [Enablements](#enablements) contains PDKs for open-source enablements such as NanGate45, ASAP7 and SKY130HD with FakeStack. Memories required by the designs are also included.
- [Flows](#flows) contains tool setups and runscripts for both proprietary and open-source SP&R tools such as Cadence Genus/Innovus and OpenROAD. - [Flows](#flows) contains tool setups and runscripts for both proprietary and open-source SP&R tools such as Cadence Genus/Innovus and OpenROAD.
- [Code Elements](#code-elements) contains implementation of engines such as Clustering, Grouping, Gridding, Format translators required by Circuit Training flow. - [Code Elements](#code-elements) contains implementation of engines such as Clustering, Grouping, Gridding, Format translators required by Circuit Training flow.
- [Baseline for Circuit Training](#baseline-for-circuit-training) provides a competitive baseline for [Google Brain's Circuit Training](https://github.com/google-research/circuit_training). - [Baseline for Circuit Training](#baseline-for-circuit-training) provides a baseline for [Google Brain's Circuit Training](https://github.com/google-research/circuit_training).
- [FAQ](#faq) - [FAQ](#faq)
- [Related Links](#related-links) - [Related Links](#related-links)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment