Merge pull request #8 from ucb-art/google_pull

Changes Reflecting BAG3 Open Sourcing Updates.
diff --git a/.gitignore b/.gitignore
index 9d13cf0..adc72b7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,9 @@
 # Misc files
 *~
+workplace_setup/tutorial_files/*
 
 # Python files
+#
 *.pyc
 __pycache__
 
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
index 707d445..12512d6 100644
--- a/.idea/inspectionProfiles/profiles_settings.xml
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<!-- 
 Copyright 2019-2021 SkyWater PDK Authors
 
 Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b44661b..a6af5f0 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<!-- 
 Copyright 2019-2021 SkyWater PDK Authors
 
 Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,6 +19,7 @@
 
 SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
 -->
+<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="PreferredVcsStorage">
     <preferredVcsName>ApexVCS</preferredVcsName>
diff --git a/.idea/modules.xml b/.idea/modules.xml
index d593e71..62d06a9 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<!-- 
 Copyright 2019-2021 SkyWater PDK Authors
 
 Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,6 +19,7 @@
 
 SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
 -->
+<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ProjectModuleManager">
     <modules>
diff --git a/.idea/skywater130.iml b/.idea/skywater130.iml
index 4c55d75..d01cb2b 100644
--- a/.idea/skywater130.iml
+++ b/.idea/skywater130.iml
@@ -1,12 +1,34 @@
+<!-- 
+Copyright 2019-2021 SkyWater PDK Authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+This code is *alternatively* available under a BSD-3-Clause license, see
+details in the README.md at the top level and the license text at
+https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+
+SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+-->
 <?xml version="1.0" encoding="UTF-8"?>
 <module type="PYTHON_MODULE" version="4">
   <component name="NewModuleRootManager">
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+      <excludeFolder url="file://$MODULE_DIR$/OA" />
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="xbase" />
     <orderEntry type="module" module-name="BAG_framework" />
+    <orderEntry type="module" module-name="xbase" />
   </component>
 </module>
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..ecacb98
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,27 @@
+<!-- 
+Copyright 2019-2021 SkyWater PDK Authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+This code is *alternatively* available under a BSD-3-Clause license, see
+details in the README.md at the top level and the license text at
+https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+
+SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+-->
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/OA/BAG_prim/.oalib b/OA/BAG_prim/.oalib
index 0859910..2fb21ba 100644
--- a/OA/BAG_prim/.oalib
+++ b/OA/BAG_prim/.oalib
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <!--
 Copyright 2019-2021 SkyWater PDK Authors
 
@@ -20,6 +19,7 @@
 
 SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
 -->
+
 <Library DMSystem="oaDMFileSys">
     <oaDMFileSys libReadOnly="No"
                  origFileSystem="Unix"/>
diff --git a/OA/BAG_prim/mim_34/data.dm b/OA/BAG_prim/mim_34/data.dm
new file mode 100644
index 0000000..8c3f4b4
--- /dev/null
+++ b/OA/BAG_prim/mim_34/data.dm
Binary files differ
diff --git a/OA/BAG_prim/mim_34/schematic/data.dm b/OA/BAG_prim/mim_34/schematic/data.dm
new file mode 100644
index 0000000..33100b8
--- /dev/null
+++ b/OA/BAG_prim/mim_34/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/mim_34/schematic/master.tag b/OA/BAG_prim/mim_34/schematic/master.tag
new file mode 100644
index 0000000..26be1be
--- /dev/null
+++ b/OA/BAG_prim/mim_34/schematic/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+sch.oa
diff --git a/OA/BAG_prim/mim_34/schematic/sch.oa b/OA/BAG_prim/mim_34/schematic/sch.oa
new file mode 100644
index 0000000..01c74a5
--- /dev/null
+++ b/OA/BAG_prim/mim_34/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/mim_34/schematic/thumbnail_128x128.png b/OA/BAG_prim/mim_34/schematic/thumbnail_128x128.png
new file mode 100644
index 0000000..8383fce
--- /dev/null
+++ b/OA/BAG_prim/mim_34/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/mim_34/symbol/data.dm b/OA/BAG_prim/mim_34/symbol/data.dm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/OA/BAG_prim/mim_34/symbol/data.dm
diff --git a/OA/BAG_prim/mim_34/symbol/master.tag b/OA/BAG_prim/mim_34/symbol/master.tag
new file mode 100644
index 0000000..e1024da
--- /dev/null
+++ b/OA/BAG_prim/mim_34/symbol/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+symbol.oa
diff --git a/OA/BAG_prim/mim_34/symbol/symbol.oa b/OA/BAG_prim/mim_34/symbol/symbol.oa
new file mode 100644
index 0000000..fb08672
--- /dev/null
+++ b/OA/BAG_prim/mim_34/symbol/symbol.oa
Binary files differ
diff --git a/OA/BAG_prim/mim_34/symbol/thumbnail_128x128.png b/OA/BAG_prim/mim_34/symbol/thumbnail_128x128.png
new file mode 100644
index 0000000..d49cf1d
--- /dev/null
+++ b/OA/BAG_prim/mim_34/symbol/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/mim_45/data.dm b/OA/BAG_prim/mim_45/data.dm
new file mode 100644
index 0000000..54063ec
--- /dev/null
+++ b/OA/BAG_prim/mim_45/data.dm
Binary files differ
diff --git a/OA/BAG_prim/mim_45/schematic/data.dm b/OA/BAG_prim/mim_45/schematic/data.dm
new file mode 100644
index 0000000..5ff58c8
--- /dev/null
+++ b/OA/BAG_prim/mim_45/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/mim_45/schematic/master.tag b/OA/BAG_prim/mim_45/schematic/master.tag
new file mode 100644
index 0000000..26be1be
--- /dev/null
+++ b/OA/BAG_prim/mim_45/schematic/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+sch.oa
diff --git a/OA/BAG_prim/mim_45/schematic/sch.oa b/OA/BAG_prim/mim_45/schematic/sch.oa
new file mode 100644
index 0000000..883b575
--- /dev/null
+++ b/OA/BAG_prim/mim_45/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/mim_45/schematic/thumbnail_128x128.png b/OA/BAG_prim/mim_45/schematic/thumbnail_128x128.png
new file mode 100644
index 0000000..ea97d0b
--- /dev/null
+++ b/OA/BAG_prim/mim_45/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/mim_45/symbol/data.dm b/OA/BAG_prim/mim_45/symbol/data.dm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/OA/BAG_prim/mim_45/symbol/data.dm
diff --git a/OA/BAG_prim/mim_45/symbol/master.tag b/OA/BAG_prim/mim_45/symbol/master.tag
new file mode 100644
index 0000000..e1024da
--- /dev/null
+++ b/OA/BAG_prim/mim_45/symbol/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+symbol.oa
diff --git a/OA/BAG_prim/mim_45/symbol/symbol.oa b/OA/BAG_prim/mim_45/symbol/symbol.oa
new file mode 100644
index 0000000..e87a73a
--- /dev/null
+++ b/OA/BAG_prim/mim_45/symbol/symbol.oa
Binary files differ
diff --git a/OA/BAG_prim/mim_45/symbol/thumbnail_128x128.png b/OA/BAG_prim/mim_45/symbol/thumbnail_128x128.png
new file mode 100644
index 0000000..d49cf1d
--- /dev/null
+++ b/OA/BAG_prim/mim_45/symbol/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/mim_standard/data.dm b/OA/BAG_prim/mim_standard/data.dm
new file mode 100644
index 0000000..5db8892
--- /dev/null
+++ b/OA/BAG_prim/mim_standard/data.dm
Binary files differ
diff --git a/OA/BAG_prim/mim_standard/schematic/data.dm b/OA/BAG_prim/mim_standard/schematic/data.dm
new file mode 100644
index 0000000..c763fb4
--- /dev/null
+++ b/OA/BAG_prim/mim_standard/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/mim_standard/schematic/master.tag b/OA/BAG_prim/mim_standard/schematic/master.tag
new file mode 100644
index 0000000..26be1be
--- /dev/null
+++ b/OA/BAG_prim/mim_standard/schematic/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+sch.oa
diff --git a/OA/BAG_prim/mim_standard/schematic/sch.oa b/OA/BAG_prim/mim_standard/schematic/sch.oa
new file mode 100644
index 0000000..7a67566
--- /dev/null
+++ b/OA/BAG_prim/mim_standard/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/mim_standard/schematic/thumbnail_128x128.png b/OA/BAG_prim/mim_standard/schematic/thumbnail_128x128.png
new file mode 100644
index 0000000..ea97d0b
--- /dev/null
+++ b/OA/BAG_prim/mim_standard/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/mim_standard/symbol/data.dm b/OA/BAG_prim/mim_standard/symbol/data.dm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/OA/BAG_prim/mim_standard/symbol/data.dm
diff --git a/OA/BAG_prim/mim_standard/symbol/master.tag b/OA/BAG_prim/mim_standard/symbol/master.tag
new file mode 100644
index 0000000..e1024da
--- /dev/null
+++ b/OA/BAG_prim/mim_standard/symbol/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+symbol.oa
diff --git a/OA/BAG_prim/mim_standard/symbol/symbol.oa b/OA/BAG_prim/mim_standard/symbol/symbol.oa
new file mode 100644
index 0000000..9055fe9
--- /dev/null
+++ b/OA/BAG_prim/mim_standard/symbol/symbol.oa
Binary files differ
diff --git a/OA/BAG_prim/mim_standard/symbol/thumbnail_128x128.png b/OA/BAG_prim/mim_standard/symbol/thumbnail_128x128.png
new file mode 100644
index 0000000..d49cf1d
--- /dev/null
+++ b/OA/BAG_prim/mim_standard/symbol/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/nmos4_hv/data.dm b/OA/BAG_prim/nmos4_hv/data.dm
index 32bc7f6..0dfd674 100644
--- a/OA/BAG_prim/nmos4_hv/data.dm
+++ b/OA/BAG_prim/nmos4_hv/data.dm
Binary files differ
diff --git a/OA/BAG_prim/nmos4_hv/schematic/data.dm b/OA/BAG_prim/nmos4_hv/schematic/data.dm
index 1a705a2..2e1ffe2 100644
--- a/OA/BAG_prim/nmos4_hv/schematic/data.dm
+++ b/OA/BAG_prim/nmos4_hv/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/nmos4_hv/schematic/sch.oa b/OA/BAG_prim/nmos4_hv/schematic/sch.oa
index 8d2ef72..7045fc1 100644
--- a/OA/BAG_prim/nmos4_hv/schematic/sch.oa
+++ b/OA/BAG_prim/nmos4_hv/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/nmos4_hv/schematic/thumbnail_128x128.png b/OA/BAG_prim/nmos4_hv/schematic/thumbnail_128x128.png
index 1d46566..c160480 100644
--- a/OA/BAG_prim/nmos4_hv/schematic/thumbnail_128x128.png
+++ b/OA/BAG_prim/nmos4_hv/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/nmos4_hvesd/data.dm b/OA/BAG_prim/nmos4_hvesd/data.dm
index bdfd88e..1ee33c3 100644
--- a/OA/BAG_prim/nmos4_hvesd/data.dm
+++ b/OA/BAG_prim/nmos4_hvesd/data.dm
Binary files differ
diff --git a/OA/BAG_prim/nmos4_hvesd/schematic/data.dm b/OA/BAG_prim/nmos4_hvesd/schematic/data.dm
index 1a705a2..2e1ffe2 100644
--- a/OA/BAG_prim/nmos4_hvesd/schematic/data.dm
+++ b/OA/BAG_prim/nmos4_hvesd/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/nmos4_hvesd/schematic/sch.oa b/OA/BAG_prim/nmos4_hvesd/schematic/sch.oa
index 30855d6..ddcefab 100644
--- a/OA/BAG_prim/nmos4_hvesd/schematic/sch.oa
+++ b/OA/BAG_prim/nmos4_hvesd/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/nmos4_hvesd/schematic/thumbnail_128x128.png b/OA/BAG_prim/nmos4_hvesd/schematic/thumbnail_128x128.png
index 313567e..a410998 100644
--- a/OA/BAG_prim/nmos4_hvesd/schematic/thumbnail_128x128.png
+++ b/OA/BAG_prim/nmos4_hvesd/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/nmos4_lvt/data.dm b/OA/BAG_prim/nmos4_lvt/data.dm
index d5a9d01..48e7cb5 100644
--- a/OA/BAG_prim/nmos4_lvt/data.dm
+++ b/OA/BAG_prim/nmos4_lvt/data.dm
Binary files differ
diff --git a/OA/BAG_prim/nmos4_lvt/schematic/data.dm b/OA/BAG_prim/nmos4_lvt/schematic/data.dm
index 1a705a2..2e1ffe2 100644
--- a/OA/BAG_prim/nmos4_lvt/schematic/data.dm
+++ b/OA/BAG_prim/nmos4_lvt/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/nmos4_lvt/schematic/sch.oa b/OA/BAG_prim/nmos4_lvt/schematic/sch.oa
index 3889907..d98f7b4 100644
--- a/OA/BAG_prim/nmos4_lvt/schematic/sch.oa
+++ b/OA/BAG_prim/nmos4_lvt/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/nmos4_lvt/schematic/thumbnail_128x128.png b/OA/BAG_prim/nmos4_lvt/schematic/thumbnail_128x128.png
index fc6a857..c335beb 100644
--- a/OA/BAG_prim/nmos4_lvt/schematic/thumbnail_128x128.png
+++ b/OA/BAG_prim/nmos4_lvt/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/nmos4_standard/data.dm b/OA/BAG_prim/nmos4_standard/data.dm
index 7773b27..92c758b 100644
--- a/OA/BAG_prim/nmos4_standard/data.dm
+++ b/OA/BAG_prim/nmos4_standard/data.dm
Binary files differ
diff --git a/OA/BAG_prim/nmos4_standard/schematic/data.dm b/OA/BAG_prim/nmos4_standard/schematic/data.dm
index 1a705a2..2e1ffe2 100644
--- a/OA/BAG_prim/nmos4_standard/schematic/data.dm
+++ b/OA/BAG_prim/nmos4_standard/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/nmos4_standard/schematic/sch.oa b/OA/BAG_prim/nmos4_standard/schematic/sch.oa
index 59f9bb6..63387a4 100644
--- a/OA/BAG_prim/nmos4_standard/schematic/sch.oa
+++ b/OA/BAG_prim/nmos4_standard/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/nmos4_standard/schematic/thumbnail_128x128.png b/OA/BAG_prim/nmos4_standard/schematic/thumbnail_128x128.png
index fc6a857..c335beb 100644
--- a/OA/BAG_prim/nmos4_standard/schematic/thumbnail_128x128.png
+++ b/OA/BAG_prim/nmos4_standard/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/nmos4_svt/data.dm b/OA/BAG_prim/nmos4_svt/data.dm
index 4244604..e27784b 100644
--- a/OA/BAG_prim/nmos4_svt/data.dm
+++ b/OA/BAG_prim/nmos4_svt/data.dm
Binary files differ
diff --git a/OA/BAG_prim/nmos4_svt/schematic/data.dm b/OA/BAG_prim/nmos4_svt/schematic/data.dm
index 1a705a2..2e1ffe2 100644
--- a/OA/BAG_prim/nmos4_svt/schematic/data.dm
+++ b/OA/BAG_prim/nmos4_svt/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/nmos4_svt/schematic/sch.oa b/OA/BAG_prim/nmos4_svt/schematic/sch.oa
index e3474a2..8d85c20 100644
--- a/OA/BAG_prim/nmos4_svt/schematic/sch.oa
+++ b/OA/BAG_prim/nmos4_svt/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/nmos4_svt/schematic/thumbnail_128x128.png b/OA/BAG_prim/nmos4_svt/schematic/thumbnail_128x128.png
index fc6a857..c335beb 100644
--- a/OA/BAG_prim/nmos4_svt/schematic/thumbnail_128x128.png
+++ b/OA/BAG_prim/nmos4_svt/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hv/data.dm b/OA/BAG_prim/pmos4_hv/data.dm
index 80ab9ed..3f3535a 100644
--- a/OA/BAG_prim/pmos4_hv/data.dm
+++ b/OA/BAG_prim/pmos4_hv/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hv/schematic/data.dm b/OA/BAG_prim/pmos4_hv/schematic/data.dm
index cc4f188..a8cc7b2 100644
--- a/OA/BAG_prim/pmos4_hv/schematic/data.dm
+++ b/OA/BAG_prim/pmos4_hv/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hv/schematic/sch.oa b/OA/BAG_prim/pmos4_hv/schematic/sch.oa
index 1207302..aac3411 100644
--- a/OA/BAG_prim/pmos4_hv/schematic/sch.oa
+++ b/OA/BAG_prim/pmos4_hv/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hv/schematic/thumbnail_128x128.png b/OA/BAG_prim/pmos4_hv/schematic/thumbnail_128x128.png
index e5b4335..a9454db 100644
--- a/OA/BAG_prim/pmos4_hv/schematic/thumbnail_128x128.png
+++ b/OA/BAG_prim/pmos4_hv/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hvesd/data.dm b/OA/BAG_prim/pmos4_hvesd/data.dm
index 60da08b..e5a906d 100644
--- a/OA/BAG_prim/pmos4_hvesd/data.dm
+++ b/OA/BAG_prim/pmos4_hvesd/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hvesd/schematic/data.dm b/OA/BAG_prim/pmos4_hvesd/schematic/data.dm
index cc4f188..a8cc7b2 100644
--- a/OA/BAG_prim/pmos4_hvesd/schematic/data.dm
+++ b/OA/BAG_prim/pmos4_hvesd/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hvesd/schematic/sch.oa b/OA/BAG_prim/pmos4_hvesd/schematic/sch.oa
index adc29aa..0fff21a 100644
--- a/OA/BAG_prim/pmos4_hvesd/schematic/sch.oa
+++ b/OA/BAG_prim/pmos4_hvesd/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hvesd/schematic/thumbnail_128x128.png b/OA/BAG_prim/pmos4_hvesd/schematic/thumbnail_128x128.png
index 7e0aa55..3cd9ebe 100644
--- a/OA/BAG_prim/pmos4_hvesd/schematic/thumbnail_128x128.png
+++ b/OA/BAG_prim/pmos4_hvesd/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hvt/data.dm b/OA/BAG_prim/pmos4_hvt/data.dm
index 1620b20..17b353a 100644
--- a/OA/BAG_prim/pmos4_hvt/data.dm
+++ b/OA/BAG_prim/pmos4_hvt/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hvt/schematic/data.dm b/OA/BAG_prim/pmos4_hvt/schematic/data.dm
index cc4f188..a8cc7b2 100644
--- a/OA/BAG_prim/pmos4_hvt/schematic/data.dm
+++ b/OA/BAG_prim/pmos4_hvt/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hvt/schematic/sch.oa b/OA/BAG_prim/pmos4_hvt/schematic/sch.oa
index 3dd2209..f321ffb 100644
--- a/OA/BAG_prim/pmos4_hvt/schematic/sch.oa
+++ b/OA/BAG_prim/pmos4_hvt/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/pmos4_hvt/schematic/thumbnail_128x128.png b/OA/BAG_prim/pmos4_hvt/schematic/thumbnail_128x128.png
index 90982fd..80e0b8e 100644
--- a/OA/BAG_prim/pmos4_hvt/schematic/thumbnail_128x128.png
+++ b/OA/BAG_prim/pmos4_hvt/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/pmos4_lvt/data.dm b/OA/BAG_prim/pmos4_lvt/data.dm
index 1fe4771..e44e48d 100644
--- a/OA/BAG_prim/pmos4_lvt/data.dm
+++ b/OA/BAG_prim/pmos4_lvt/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_lvt/schematic/data.dm b/OA/BAG_prim/pmos4_lvt/schematic/data.dm
index cc4f188..a8cc7b2 100644
--- a/OA/BAG_prim/pmos4_lvt/schematic/data.dm
+++ b/OA/BAG_prim/pmos4_lvt/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_lvt/schematic/sch.oa b/OA/BAG_prim/pmos4_lvt/schematic/sch.oa
index 48a37ed..3d6bf49 100644
--- a/OA/BAG_prim/pmos4_lvt/schematic/sch.oa
+++ b/OA/BAG_prim/pmos4_lvt/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/pmos4_lvt/schematic/thumbnail_128x128.png b/OA/BAG_prim/pmos4_lvt/schematic/thumbnail_128x128.png
index 18ef0a2..80e0b8e 100644
--- a/OA/BAG_prim/pmos4_lvt/schematic/thumbnail_128x128.png
+++ b/OA/BAG_prim/pmos4_lvt/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/pmos4_standard/data.dm b/OA/BAG_prim/pmos4_standard/data.dm
index 46e2f02..b36791f 100644
--- a/OA/BAG_prim/pmos4_standard/data.dm
+++ b/OA/BAG_prim/pmos4_standard/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_standard/schematic/data.dm b/OA/BAG_prim/pmos4_standard/schematic/data.dm
index cc4f188..a8cc7b2 100644
--- a/OA/BAG_prim/pmos4_standard/schematic/data.dm
+++ b/OA/BAG_prim/pmos4_standard/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_standard/schematic/sch.oa b/OA/BAG_prim/pmos4_standard/schematic/sch.oa
index 20eb681..5c4f0ef 100644
--- a/OA/BAG_prim/pmos4_standard/schematic/sch.oa
+++ b/OA/BAG_prim/pmos4_standard/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/pmos4_standard/schematic/thumbnail_128x128.png b/OA/BAG_prim/pmos4_standard/schematic/thumbnail_128x128.png
index d96f8b1..80e0b8e 100644
--- a/OA/BAG_prim/pmos4_standard/schematic/thumbnail_128x128.png
+++ b/OA/BAG_prim/pmos4_standard/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/pmos4_svt/data.dm b/OA/BAG_prim/pmos4_svt/data.dm
index 2ee0a48..7e2079e 100644
--- a/OA/BAG_prim/pmos4_svt/data.dm
+++ b/OA/BAG_prim/pmos4_svt/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_svt/schematic/data.dm b/OA/BAG_prim/pmos4_svt/schematic/data.dm
index cc4f188..a8cc7b2 100644
--- a/OA/BAG_prim/pmos4_svt/schematic/data.dm
+++ b/OA/BAG_prim/pmos4_svt/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/pmos4_svt/schematic/sch.oa b/OA/BAG_prim/pmos4_svt/schematic/sch.oa
index b1a0f9e..465cde8 100644
--- a/OA/BAG_prim/pmos4_svt/schematic/sch.oa
+++ b/OA/BAG_prim/pmos4_svt/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/pmos4_svt/schematic/thumbnail_128x128.png b/OA/BAG_prim/pmos4_svt/schematic/thumbnail_128x128.png
index d96f8b1..80e0b8e 100644
--- a/OA/BAG_prim/pmos4_svt/schematic/thumbnail_128x128.png
+++ b/OA/BAG_prim/pmos4_svt/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_high_res/data.dm b/OA/BAG_prim/res_high_res/data.dm
new file mode 100644
index 0000000..0fdfd8e
--- /dev/null
+++ b/OA/BAG_prim/res_high_res/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_high_res/schematic/data.dm b/OA/BAG_prim/res_high_res/schematic/data.dm
new file mode 100644
index 0000000..30eb103
--- /dev/null
+++ b/OA/BAG_prim/res_high_res/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_high_res/schematic/master.tag b/OA/BAG_prim/res_high_res/schematic/master.tag
new file mode 100644
index 0000000..26be1be
--- /dev/null
+++ b/OA/BAG_prim/res_high_res/schematic/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+sch.oa
diff --git a/OA/BAG_prim/res_high_res/schematic/sch.oa b/OA/BAG_prim/res_high_res/schematic/sch.oa
new file mode 100644
index 0000000..3523858
--- /dev/null
+++ b/OA/BAG_prim/res_high_res/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/res_high_res/schematic/thumbnail_128x128.png b/OA/BAG_prim/res_high_res/schematic/thumbnail_128x128.png
new file mode 100644
index 0000000..f738db9
--- /dev/null
+++ b/OA/BAG_prim/res_high_res/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_high_res/symbol/data.dm b/OA/BAG_prim/res_high_res/symbol/data.dm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/OA/BAG_prim/res_high_res/symbol/data.dm
diff --git a/OA/BAG_prim/res_high_res/symbol/master.tag b/OA/BAG_prim/res_high_res/symbol/master.tag
new file mode 100644
index 0000000..e1024da
--- /dev/null
+++ b/OA/BAG_prim/res_high_res/symbol/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+symbol.oa
diff --git a/OA/BAG_prim/res_high_res/symbol/symbol.oa b/OA/BAG_prim/res_high_res/symbol/symbol.oa
new file mode 100644
index 0000000..b4ae5ab
--- /dev/null
+++ b/OA/BAG_prim/res_high_res/symbol/symbol.oa
Binary files differ
diff --git a/OA/BAG_prim/res_high_res/symbol/thumbnail_128x128.png b/OA/BAG_prim/res_high_res/symbol/thumbnail_128x128.png
new file mode 100644
index 0000000..6ae4f51
--- /dev/null
+++ b/OA/BAG_prim/res_high_res/symbol/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_metal_1/data.dm b/OA/BAG_prim/res_metal_1/data.dm
new file mode 100644
index 0000000..2b82faa
--- /dev/null
+++ b/OA/BAG_prim/res_metal_1/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_metal_1/schematic/data.dm b/OA/BAG_prim/res_metal_1/schematic/data.dm
new file mode 100644
index 0000000..b12cec4
--- /dev/null
+++ b/OA/BAG_prim/res_metal_1/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_metal_1/schematic/master.tag b/OA/BAG_prim/res_metal_1/schematic/master.tag
new file mode 100644
index 0000000..26be1be
--- /dev/null
+++ b/OA/BAG_prim/res_metal_1/schematic/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+sch.oa
diff --git a/OA/BAG_prim/res_metal_1/schematic/sch.oa b/OA/BAG_prim/res_metal_1/schematic/sch.oa
new file mode 100644
index 0000000..5b1bf47
--- /dev/null
+++ b/OA/BAG_prim/res_metal_1/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/res_metal_1/schematic/thumbnail_128x128.png b/OA/BAG_prim/res_metal_1/schematic/thumbnail_128x128.png
new file mode 100644
index 0000000..52d2680
--- /dev/null
+++ b/OA/BAG_prim/res_metal_1/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_metal_1/symbol/master.tag b/OA/BAG_prim/res_metal_1/symbol/master.tag
new file mode 100644
index 0000000..e1024da
--- /dev/null
+++ b/OA/BAG_prim/res_metal_1/symbol/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+symbol.oa
diff --git a/OA/BAG_prim/res_metal_1/symbol/symbol.oa b/OA/BAG_prim/res_metal_1/symbol/symbol.oa
new file mode 100644
index 0000000..989d09a
--- /dev/null
+++ b/OA/BAG_prim/res_metal_1/symbol/symbol.oa
Binary files differ
diff --git a/OA/BAG_prim/res_metal_1/symbol/thumbnail_128x128.png b/OA/BAG_prim/res_metal_1/symbol/thumbnail_128x128.png
new file mode 100644
index 0000000..adc228c
--- /dev/null
+++ b/OA/BAG_prim/res_metal_1/symbol/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_metal_2/data.dm b/OA/BAG_prim/res_metal_2/data.dm
new file mode 100644
index 0000000..0d545cb
--- /dev/null
+++ b/OA/BAG_prim/res_metal_2/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_metal_2/schematic/data.dm b/OA/BAG_prim/res_metal_2/schematic/data.dm
new file mode 100644
index 0000000..69ce3a2
--- /dev/null
+++ b/OA/BAG_prim/res_metal_2/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_metal_2/schematic/master.tag b/OA/BAG_prim/res_metal_2/schematic/master.tag
new file mode 100644
index 0000000..26be1be
--- /dev/null
+++ b/OA/BAG_prim/res_metal_2/schematic/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+sch.oa
diff --git a/OA/BAG_prim/res_metal_2/schematic/sch.oa b/OA/BAG_prim/res_metal_2/schematic/sch.oa
new file mode 100644
index 0000000..3d5ea4c
--- /dev/null
+++ b/OA/BAG_prim/res_metal_2/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/res_metal_2/schematic/thumbnail_128x128.png b/OA/BAG_prim/res_metal_2/schematic/thumbnail_128x128.png
new file mode 100644
index 0000000..52d2680
--- /dev/null
+++ b/OA/BAG_prim/res_metal_2/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_metal_2/symbol/data.dm b/OA/BAG_prim/res_metal_2/symbol/data.dm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/OA/BAG_prim/res_metal_2/symbol/data.dm
diff --git a/OA/BAG_prim/res_metal_2/symbol/master.tag b/OA/BAG_prim/res_metal_2/symbol/master.tag
new file mode 100644
index 0000000..e1024da
--- /dev/null
+++ b/OA/BAG_prim/res_metal_2/symbol/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+symbol.oa
diff --git a/OA/BAG_prim/res_metal_2/symbol/symbol.oa b/OA/BAG_prim/res_metal_2/symbol/symbol.oa
new file mode 100644
index 0000000..7a84416
--- /dev/null
+++ b/OA/BAG_prim/res_metal_2/symbol/symbol.oa
Binary files differ
diff --git a/OA/BAG_prim/res_metal_2/symbol/thumbnail_128x128.png b/OA/BAG_prim/res_metal_2/symbol/thumbnail_128x128.png
new file mode 100644
index 0000000..adc228c
--- /dev/null
+++ b/OA/BAG_prim/res_metal_2/symbol/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_metal_3/data.dm b/OA/BAG_prim/res_metal_3/data.dm
new file mode 100644
index 0000000..8057d42
--- /dev/null
+++ b/OA/BAG_prim/res_metal_3/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_metal_3/schematic/data.dm b/OA/BAG_prim/res_metal_3/schematic/data.dm
new file mode 100644
index 0000000..b131bb5
--- /dev/null
+++ b/OA/BAG_prim/res_metal_3/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_metal_3/schematic/master.tag b/OA/BAG_prim/res_metal_3/schematic/master.tag
new file mode 100644
index 0000000..26be1be
--- /dev/null
+++ b/OA/BAG_prim/res_metal_3/schematic/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+sch.oa
diff --git a/OA/BAG_prim/res_metal_3/schematic/sch.oa b/OA/BAG_prim/res_metal_3/schematic/sch.oa
new file mode 100644
index 0000000..2e71d39
--- /dev/null
+++ b/OA/BAG_prim/res_metal_3/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/res_metal_3/schematic/thumbnail_128x128.png b/OA/BAG_prim/res_metal_3/schematic/thumbnail_128x128.png
new file mode 100644
index 0000000..52d2680
--- /dev/null
+++ b/OA/BAG_prim/res_metal_3/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_metal_3/symbol/data.dm b/OA/BAG_prim/res_metal_3/symbol/data.dm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/OA/BAG_prim/res_metal_3/symbol/data.dm
diff --git a/OA/BAG_prim/res_metal_3/symbol/master.tag b/OA/BAG_prim/res_metal_3/symbol/master.tag
new file mode 100644
index 0000000..e1024da
--- /dev/null
+++ b/OA/BAG_prim/res_metal_3/symbol/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+symbol.oa
diff --git a/OA/BAG_prim/res_metal_3/symbol/symbol.oa b/OA/BAG_prim/res_metal_3/symbol/symbol.oa
new file mode 100644
index 0000000..5fd7a03
--- /dev/null
+++ b/OA/BAG_prim/res_metal_3/symbol/symbol.oa
Binary files differ
diff --git a/OA/BAG_prim/res_metal_3/symbol/thumbnail_128x128.png b/OA/BAG_prim/res_metal_3/symbol/thumbnail_128x128.png
new file mode 100644
index 0000000..adc228c
--- /dev/null
+++ b/OA/BAG_prim/res_metal_3/symbol/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_metal_4/data.dm b/OA/BAG_prim/res_metal_4/data.dm
new file mode 100644
index 0000000..e4f1f37
--- /dev/null
+++ b/OA/BAG_prim/res_metal_4/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_metal_4/schematic/data.dm b/OA/BAG_prim/res_metal_4/schematic/data.dm
new file mode 100644
index 0000000..b131bb5
--- /dev/null
+++ b/OA/BAG_prim/res_metal_4/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_metal_4/schematic/master.tag b/OA/BAG_prim/res_metal_4/schematic/master.tag
new file mode 100644
index 0000000..26be1be
--- /dev/null
+++ b/OA/BAG_prim/res_metal_4/schematic/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+sch.oa
diff --git a/OA/BAG_prim/res_metal_4/schematic/sch.oa b/OA/BAG_prim/res_metal_4/schematic/sch.oa
new file mode 100644
index 0000000..fc78555
--- /dev/null
+++ b/OA/BAG_prim/res_metal_4/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/res_metal_4/schematic/thumbnail_128x128.png b/OA/BAG_prim/res_metal_4/schematic/thumbnail_128x128.png
new file mode 100644
index 0000000..52d2680
--- /dev/null
+++ b/OA/BAG_prim/res_metal_4/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_metal_4/symbol/data.dm b/OA/BAG_prim/res_metal_4/symbol/data.dm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/OA/BAG_prim/res_metal_4/symbol/data.dm
diff --git a/OA/BAG_prim/res_metal_4/symbol/master.tag b/OA/BAG_prim/res_metal_4/symbol/master.tag
new file mode 100644
index 0000000..e1024da
--- /dev/null
+++ b/OA/BAG_prim/res_metal_4/symbol/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+symbol.oa
diff --git a/OA/BAG_prim/res_metal_4/symbol/symbol.oa b/OA/BAG_prim/res_metal_4/symbol/symbol.oa
new file mode 100644
index 0000000..a07d714
--- /dev/null
+++ b/OA/BAG_prim/res_metal_4/symbol/symbol.oa
Binary files differ
diff --git a/OA/BAG_prim/res_metal_4/symbol/thumbnail_128x128.png b/OA/BAG_prim/res_metal_4/symbol/thumbnail_128x128.png
new file mode 100644
index 0000000..adc228c
--- /dev/null
+++ b/OA/BAG_prim/res_metal_4/symbol/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_metal_5/data.dm b/OA/BAG_prim/res_metal_5/data.dm
new file mode 100644
index 0000000..15812be
--- /dev/null
+++ b/OA/BAG_prim/res_metal_5/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_metal_5/schematic/data.dm b/OA/BAG_prim/res_metal_5/schematic/data.dm
new file mode 100644
index 0000000..b131bb5
--- /dev/null
+++ b/OA/BAG_prim/res_metal_5/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_metal_5/schematic/master.tag b/OA/BAG_prim/res_metal_5/schematic/master.tag
new file mode 100644
index 0000000..26be1be
--- /dev/null
+++ b/OA/BAG_prim/res_metal_5/schematic/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+sch.oa
diff --git a/OA/BAG_prim/res_metal_5/schematic/sch.oa b/OA/BAG_prim/res_metal_5/schematic/sch.oa
new file mode 100644
index 0000000..49578ff
--- /dev/null
+++ b/OA/BAG_prim/res_metal_5/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/res_metal_5/schematic/thumbnail_128x128.png b/OA/BAG_prim/res_metal_5/schematic/thumbnail_128x128.png
new file mode 100644
index 0000000..52d2680
--- /dev/null
+++ b/OA/BAG_prim/res_metal_5/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_metal_5/symbol/data.dm b/OA/BAG_prim/res_metal_5/symbol/data.dm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/OA/BAG_prim/res_metal_5/symbol/data.dm
diff --git a/OA/BAG_prim/res_metal_5/symbol/master.tag b/OA/BAG_prim/res_metal_5/symbol/master.tag
new file mode 100644
index 0000000..e1024da
--- /dev/null
+++ b/OA/BAG_prim/res_metal_5/symbol/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+symbol.oa
diff --git a/OA/BAG_prim/res_metal_5/symbol/symbol.oa b/OA/BAG_prim/res_metal_5/symbol/symbol.oa
new file mode 100644
index 0000000..02f3711
--- /dev/null
+++ b/OA/BAG_prim/res_metal_5/symbol/symbol.oa
Binary files differ
diff --git a/OA/BAG_prim/res_metal_5/symbol/thumbnail_128x128.png b/OA/BAG_prim/res_metal_5/symbol/thumbnail_128x128.png
new file mode 100644
index 0000000..adc228c
--- /dev/null
+++ b/OA/BAG_prim/res_metal_5/symbol/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_standard/data.dm b/OA/BAG_prim/res_standard/data.dm
new file mode 100644
index 0000000..416ffe6
--- /dev/null
+++ b/OA/BAG_prim/res_standard/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_standard/schematic/data.dm b/OA/BAG_prim/res_standard/schematic/data.dm
new file mode 100644
index 0000000..9c7fdb9
--- /dev/null
+++ b/OA/BAG_prim/res_standard/schematic/data.dm
Binary files differ
diff --git a/OA/BAG_prim/res_standard/schematic/master.tag b/OA/BAG_prim/res_standard/schematic/master.tag
new file mode 100644
index 0000000..26be1be
--- /dev/null
+++ b/OA/BAG_prim/res_standard/schematic/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+sch.oa
diff --git a/OA/BAG_prim/res_standard/schematic/sch.oa b/OA/BAG_prim/res_standard/schematic/sch.oa
new file mode 100644
index 0000000..16a1853
--- /dev/null
+++ b/OA/BAG_prim/res_standard/schematic/sch.oa
Binary files differ
diff --git a/OA/BAG_prim/res_standard/schematic/thumbnail_128x128.png b/OA/BAG_prim/res_standard/schematic/thumbnail_128x128.png
new file mode 100644
index 0000000..f738db9
--- /dev/null
+++ b/OA/BAG_prim/res_standard/schematic/thumbnail_128x128.png
Binary files differ
diff --git a/OA/BAG_prim/res_standard/symbol/data.dm b/OA/BAG_prim/res_standard/symbol/data.dm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/OA/BAG_prim/res_standard/symbol/data.dm
diff --git a/OA/BAG_prim/res_standard/symbol/master.tag b/OA/BAG_prim/res_standard/symbol/master.tag
new file mode 100644
index 0000000..e1024da
--- /dev/null
+++ b/OA/BAG_prim/res_standard/symbol/master.tag
@@ -0,0 +1,2 @@
+-- Master.tag File, Rev:1.0
+symbol.oa
diff --git a/OA/BAG_prim/res_standard/symbol/symbol.oa b/OA/BAG_prim/res_standard/symbol/symbol.oa
new file mode 100644
index 0000000..40c5f01
--- /dev/null
+++ b/OA/BAG_prim/res_standard/symbol/symbol.oa
Binary files differ
diff --git a/OA/BAG_prim/res_standard/symbol/thumbnail_128x128.png b/OA/BAG_prim/res_standard/symbol/thumbnail_128x128.png
new file mode 100644
index 0000000..6ae4f51
--- /dev/null
+++ b/OA/BAG_prim/res_standard/symbol/thumbnail_128x128.png
Binary files differ
diff --git a/README.md b/README.md
index 3aa33d4..e1ef64f 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
 
 This repository also contains a **work in progress** to make these primitives
 and the BAG3 framework compatible with
-[the Google skywater-pdk, a fully open source, manufacturable PDK for SkyWater's 130nm (SKY13) process node](https://github.com/google/skywater-pdk).
+[the Google skywater-pdk, a fully open source, manufacturable PDK for SkyWater's 130nm (SKY130) process node](https://github.com/google/skywater-pdk).
 
 When combined with appropriate generator code, the primitives enables the
 creation of analog integrated circuits that are manufacturable at
@@ -21,6 +21,78 @@
 of the Berkeley Analog Generator framework (see also
 [BAG v2 framework](https://github.com/ucb-art/bag)).
 
+These primitives are updated for V2.0.0 of the PDK. It currently support layout
+generation and LVS using Virtuoso pcells, which was previously not supported.
+Simulations using BAG is also supported.
+
+This workspace and tech plugin are primarily maintained by Ayan Biswas, Felicia
+Guo, Sean Huang, and Bob Zhou.
+
+## Technology features and hints
+
+- Layout resolution is in 5nm.
+- Min channel length is 150nm, so min channel units is 30.
+- This tech has standard, lvt, and hvt devices. pch hvt and lvt have min
+  channel length of 350um, so they cannot be used for logic-style MOS with nch.
+- Min nch width is 420nm (84 units). Min pch width is 550nm (110 units).
+- Widths are quantized in irregular intervals. See the pcells for examples.
+  - Nch has 840nm. Pch has 1120nm.
+- This tech has 5 metal layers and an "M0" (LI) layer.
+- This tech has pcell MOM caps. M1-M2 caps provide ~0.4 fF / um^2. M1-M4 caps
+  provide ~0.74 fF / um^2.
+- This tech has pcell MIM caps, between M3-M4 and M4-M5. Both provide ~2.2 fF / um^2.
+
+SD pitch: 0.430 um ~ 86 units. BAG quantizes vertical metal pitches to match
+the SD pitch ~ li, met2, met4
+
+Metal min width and space (um):
+- li : 0.170, 0.170
+- met1: 0.140, 0.140
+- met2: 0.140, 0.140
+- met3: 0.300, 0.300
+- met4: 0.300, 0.300
+- met5: 1.600, 1.600
+
+Track manager hints:
+- m4 needs to be at least w=5 to connect to m5
+
+### Resistors
+
+- This tech has two flavors of "precisions" poly resistors: hrpoly (300 ohm /
+  sq) and uhrpoly (2K ohm / sq). Min width is 0.33 um / 66 units, min resistor
+  length is 0.5 um / 100 units. The contacts have a 2.16um length, required by
+  DRC, so the min overall length is 4.82um.
+
+- `res_type: standard` ~ hrpoly
+
+Width selection
+
+- For nice compatibility with the routing grid, make the unit cell width
+  quantized to the sd pitch ~ 430 nm / 86 units. (not a hard requirement)
+- LR edges account for up to an additional 780nm / 156 unit
+- Some good values: 102, 360, 532
+
+Length selection
+- To minimize unused area, quantize unit height to sd pitch ~ 86 for working
+  with the routing grid. (not a hard requirement)
+    - Otherwise, unit height will round up to the next pitch of 86
+- TB edges, including taps, account for up to 5.530 um / 1106 units
+- Some good values: 270, 614
+
+## Abstract Generation
+
+Abstract generation in this technology does not work out of the box. More
+details in [this README.](abstract_setup/README.md)
+
+## Extraction
+
+- This tech uses Calibre xRC for extraction. See $PDK_HOME/PEX/xRC and the
+  manual for details.
+- The xRC SVRF is set up to produce SPF files, to match other PEX tools. It can
+  produce Spectre-format PEX netlists, but this has not been tested rigorously.
+- xRC automatically capitalizes cell names, so top level cell names need to be
+  full capitalized.
+
 ## License
 
 To enable wide compatibility with the existing BAG ecosystem, this repository
diff --git a/abstract_setup/README.md b/abstract_setup/README.md
new file mode 100644
index 0000000..9b3e7a2
--- /dev/null
+++ b/abstract_setup/README.md
@@ -0,0 +1,100 @@
+# Skywater 130 Abstract Generation
+
+The `s8phirs_10r` tech library is somewhat broken when it comes to abstract generation as the techfile is missing some necessary fields. If you would like to generate abstract views (LEF) in sky130 through BAG or manually you have two options, one fast and one slow.
+
+## Fast Option ⬅ (use this one)
+
+Instead of adding `s8phirs_10r` and attaching this to your design and/or BAG output library, add and attach to the library in:
+
+``` unix
+/tools/commercial/skywater/swtech130/local/skywater-src-nda-techfile-fix/s8/V2.0.1/V2.0.1/VirtuosoOA/libs/s8phirs_10r
+```
+
+This library has a fixed techfile and tech.db such that you can now run `gen_cell.py` with the `-lef` option or just load your library into the Cadence abstract tool.
+
+## Slow Option
+
+The issue with the foundry techfiles is twofold:
+
+1. The techfiles are missing the `LEFDefaultRouteSpec` constraint group
+2. The mask numbers are undefined in the `layerRules` section of the techfile.
+
+Both of these issues have to be corrected before abstract will load libraries, and if BAG’s lefgen is run without these fixes, the LEF generation completes but the resulting file is empty.
+
+### Modifying the techfile
+
+You will need write access to the modified library. This may involve copying the s8phirs_10r library from the original PDK location to one where you have write access.
+
+Open Virtuoso and either make a new library and attach it to `s8phirs_10r` or pick a library that is already attached to said technology. Open the Technology File Manager from the CIW through Tools > Technology File Manager.
+
+![Technology File Manager](../docs/images/techman.png)
+
+From here, either make a copy of the techfile in the PDK or have the Technology File Manger do it by opening the TechDB Checker, selecting `s8phirs_10r` and clicking View Techfile. This will create a new copy of the techfile in your local directory. Make the following changes to this file.
+
+#### LEFDefaultRouteSpec
+
+Add the correct definition of this constraint group under the `constraintGroups(` section as follows:
+
+``` SKILL
+ ;( group	[override]	[definition]	[operator] )
+ ;( -----	----------	------------	---------- )
+  ( "LEFDefaultRouteSpec"	nil	"LEFDefaultRouteSpec"
+	
+	interconnect(
+		(validLayers	(poly li1 met1 met2 met3 met4 met5))
+		(validVias	(TPL1_C PYL1_C L1M1_C M1M2_C M2M3_C M3M4_C M4M5_C))
+	) ;interconnect
+  ) ;LEFDefaultRouteSpec
+```
+
+Note that the `validVias` are defined as per the via definitions earlier in the techfile and not the via layer names.
+
+#### layerRules
+
+For the layer rules, we just need to add mask numbers. These don’t appear to need to correspond to any other layer maps so we can just add numbers in order as follows:
+
+``` SKILL
+layerRules(
+
+ functions(
+ ;( layer                       function        [maskNumber])
+ ;( -----                       --------        ------------)
+  ( pwell                    	"pwell"      	1			)
+  ( nwell                    	"nwell"      	2			)
+  ( diff                     	"ndiff"      	3			)
+  ( tap                      	"ndiff"      	4			)
+  ( poly                     	"poly"       	5			)
+  ( licon1                   	"cut"        	6			)
+  ( li1                      	"metal"      	7			)
+  ( mcon                     	"cut"        	8			)
+  ( met1                     	"metal"      	9			)
+  ( via                      	"cut"        	10			)
+  ( met2                     	"metal"      	11			)
+  ( via2                     	"cut"        	12			)
+  ( met3                     	"metal"      	13			)
+  ( via3                     	"cut"        	14			)
+  ( met4                     	"metal"      	15			)
+  ( via4                     	"cut"        	16			)
+  ( met5                     	"metal"      	17			)
+  ( pad                      	"cut"        	18			)
+  ( rdl                      	"metal"      	19			)
+ ) ;functions
+
+) ;layerRules
+```
+
+### Saving the Changes
+
+In order for the changes to take effect, the techfile must be merged back into the library and saved to the tech database. From the Technology File Manager, select Load…
+
+![Load Technology File](../docs/images/loadtech.png)
+
+Add your locally modified techfile to the ASCII Technology File field, and select the layerRules and constraintGroups Classes. At the bottom, select the technology library that you have write access to. Either Merge or Replace will work here, but after confirming your settings, run the load and check the CIW for any warnings/errors.
+
+***Alternatively, if you are editing the techfile in the library directly, you can skip the steps up to this point.***
+
+Once you have loaded the techfile and merged with the tech library you will need to save it into the tech database. From the Technology File Manager, select Save… and point to the library we merged our techfile into previously.
+
+![Save Technology File](../docs/images/savetech.png)
+
+Just hit OK here and watch the CIW for any errors/warnings. If all goes well the CIW should report that the tech library was successfully saved. Once this happens, you are all ready to use abstract generation in sky130! (Told you you should have used the fast option.)
diff --git a/abstract_setup/bag_abstract.options b/abstract_setup/bag_abstract.options
new file mode 100644
index 0000000..9cfad3d
--- /dev/null
+++ b/abstract_setup/bag_abstract.options
@@ -0,0 +1,845 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Abstract Options File
+;; Abstract_Generator version sub-version  ICADVM18.1-64b.83  on Jul 11 16:33:23 2019
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+absSetOption( "DateTimeLog"                "false")
+absSetOption( "UseOldExtract"              "true")
+absSetOption( "QuickAbstract"              "false")
+absSetOption( "OptimizeBigDesignMemory"    "false")
+absSetOption( "AnnotateBusInAbstract"      "true")
+absSetOption( "UseConstraintGroup"         "")
+absSetOption( "SortMethod"                 "Name")
+absSetOption( "SortView"                   "Abstract")
+absSetOption( "SortOrder"                  "Ascending")
+absSetOption( "NewLibraryName"             "")
+absSetOption( "NewLibraryPath"             ".")
+absSetOption( "ImportGDSIIFiles"           "")
+absSetOption( "ImportGDSIITemplateFile"    "")
+absSetOption( "ImportGDSIILayerMapFile"    "")
+absSetOption( "GdsIIImportTechRefLib"      "")
+absSetOption( "ImportGDSIICaseMap"         "No Mapping")
+absSetOption( "ImportOasisFiles"           "")
+absSetOption( "ImportOasisTemplateFile"    "")
+absSetOption( "ImportOasisLayerMapFile"    "")
+absSetOption( "OasisImportTechRefLib"      "")
+absSetOption( "ImportOasisCaseMap"         "No Mapping")
+absSetOption( "ImportOasisEnableColoring"  "true")
+absSetOption( "ImportLefFiles"             "")
+absSetOption( "ImportLefView"              "abstract")
+absSetOption( "LefImportTechRefLib"        "")
+absSetOption( "ImportTechLef"              "false")
+absSetOption( "ImportGDSIIEnableColoring"  "true")
+absSetOption( "runAbstractHookPostOat"     "false")
+absSetOption( "ImportDefFiles"             "")
+absSetOption( "ImportLogicalType"          "Verilog")
+absSetOption( "ImportOptionsFile"          "")
+absSetOption( "ImportLIBFiles"             "")
+absSetOption( "ExportGeometryLefData"      "true")
+absSetOption( "ExportLEFCellListFile"      "")
+absSetOption( "ExportTechLefData"          "false")
+absSetOption( "ExportLEFUnits"             "1000")
+absSetOption( "ExportLEFVersion"           "5.6")
+absSetOption( "ExportBusChars"             "[ ]")
+absSetOption( "ExportDividerChar"          "/")
+absSetOption( "CellStatsFile"              "cellSummary.report")
+absSetOption( "ExportReportFile"           "abstract.report")
+absSetOption( "ExportOptionsFile"          "abstract.options")
+absSetOption( "SelectName"                 "")
+absSetOption( "SelectView"                 "All")
+absSetOption( "SelectHeightFrom"           "")
+absSetOption( "SelectHeightTo"             "")
+absSetOption( "SelectPropertyName"         "")
+absSetOption( "SelectPropertyVal"          "")
+absSetOption( "SelectValid"                "false")
+absSetOption( "SelectInvalid"              "false")
+absSetOption( "ViewLayout"                 "layout")
+absSetOption( "ViewLogical"                "logical")
+absSetOption( "ViewAbstract"               "abstract")
+absSetOption( "ExtractedPurpose"           "net")
+absSetOption( "InterpType"                 "Skill")
+absSetOption( "SelectByMsg"                "")
+absSetOption( "DefaultBin"                 "Block")
+absSetOption( "ExportLEFBin"               "All")
+absSetOption( "DistributeBinAboveTop"      "Block")
+absSetOption( "DistributeBinAboveMiddle"   "IO")
+absSetOption( "DistributeBinAboveBottom"   "Core")
+absSetOption( "DistributeBinBelowBottom"   "Ignore")
+absSetOption( "DistributeBinMatch1"        "Block")
+absSetOption( "DistributeBinMatch2"        "IO")
+absSetOption( "DistributeBinMatch3"        "Core")
+absSetOption( "DistributeBinMatchOther"    "Ignore")
+absSetOption( "DistributeBinCoreType"      "Core")
+absSetOption( "DistributeBinIOType"        "IO")
+absSetOption( "DistributeBinCornerType"    "Corner")
+absSetOption( "DistributeBinBlockType"     "Block")
+absSetOption( "DistributeBinOtherType"     "Ignore")
+absSetOption( "DistributeMethod"           "height")
+absSetOption( "DistributeCells"            "all")
+absSetOption( "DistributeHeightTop"        "1000")
+absSetOption( "DistributeHeightMiddle"     "180")
+absSetOption( "DistributeHeightBottom"     "100")
+absSetOption( "DistributeMatch1"           "block")
+absSetOption( "DistributeMatch2"           "io")
+absSetOption( "DistributeMatch3"           "core")
+absSetOption( "ExcludePurposeList"         "boundary")
+absSetOption( "ShowBubbleHelp"             "true")
+absSetOption( "GridCellsPrbFactorX"        "1000")
+absSetOption( "GridCellsPrbFactorY"        "1000")
+absSetOption( "GridCellsTermsOnGridFactor" "1000")
+absSetOption( "GridCellsTermsValidFactor"  "1000")
+absSetOption( "GridCellsBlockagesOnGridFactor" "1000")
+absSetOption( "GridTermsOnGridFactor"      "10")
+absSetOption( "GridPinsOnGridFactor"       "10")
+absSetOption( "GridBlockagesOnGridFactor"  "10")
+absSetOption( "GridDiagonalViasFactor"     "10000")
+absSetOption( "ExtractShapeLimit"          "30000")
+absSetOption( "suppressMessage"            "0")
+absSetOption( "RecordFile"                 "abstract.record")
+absSetOption( "RecordMode"                 "Append")
+absSetOption( "ReplayFiles"                "")
+absSetOption( "IgnoreCellsForExtraction"   "")
+absSetOption( "AnnotateLayoutDualView"     "false")
+absSetOption( "ReadVoltageAndPurposeRules" "false")
+absSetOption( "CopyMSRoutingConstraints"   "false")
+absSetOption( "ReadOnlyTechnology"         "true")
+absSetOption( "numOfPointsInEllipseOrDonut" "64")
+
+
+absDeselectBin("Core" )
+absSetBinOption( "Core" "PinsTextPinMap"             "")
+absSetBinOption( "Core" "PinsPowerNames"             "^((V(DD|CC).*)|(v(dd|cc)))(!)?$")
+absSetBinOption( "Core" "PinsGroundNames"            "^((VSS|GND)|(vss|gnd))(!)?$")
+absSetBinOption( "Core" "PinsClockNames"             "")
+absSetBinOption( "Core" "PinsAnalogNames"            "")
+absSetBinOption( "Core" "PinsOutputNames"            "")
+absSetBinOption( "Core" "ExcludeExistingTerminals"   "")
+absSetBinOption( "Core" "PinsExcludeExistingPinssOnLayers" "")
+absSetBinOption( "Core" "PinsFromTextForExistingPins" "false")
+absSetBinOption( "Core" "PinsTextPromoteLevel"       "0")
+absSetBinOption( "Core" "PinsGeomSearchLevel"        "20")
+absSetBinOption( "Core" "PinsTextManipulation"       "{\\\\.extra.*} {} :.* {} {\\(([0-9]+)\\)} {<\\1>} {\\[([0-9]+)\\]} {<\\1>}")
+absSetBinOption( "Core" "PinsTextManipulationTable"  "")
+absSetBinOption( "Core" "PinsTextPreserveLabels"     "true")
+absSetBinOption( "Core" "PinsRestrictToPRBndry"      "false")
+absSetBinOption( "Core" "PinsBoundaryCreate"         "as needed")
+absSetBinOption( "Core" "PinsBoundaryLayers"         "met1 met2 met3 met4 met5 via via2 via3 via4 poly diff nwell ")
+absSetBinOption( "Core" "PinsBoundarySizeLeft"       "")
+absSetBinOption( "Core" "PinsBoundarySizeRight"      "")
+absSetBinOption( "Core" "PinsBoundarySizeTop"        "")
+absSetBinOption( "Core" "PinsBoundarySizeBottom"     "")
+absSetBinOption( "Core" "PinsBoundaryFixedLeft"      "")
+absSetBinOption( "Core" "PinsBoundaryFixedRight"     "")
+absSetBinOption( "Core" "PinsBoundaryFixedTop"       "")
+absSetBinOption( "Core" "PinsBoundaryFixedBottom"    "")
+absSetBinOption( "Core" "PinsPreserveRoutingBlockages" "false")
+absSetBinOption( "Core" "PinsCreatePwrPinsFromRouting" "false")
+absSetBinOption( "Core" "PinsPwrRoutingLayers"       "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Core" "PinsCreatepolyPRB"          "false")
+absSetBinOption( "Core" "ExtractSig"                 "true")
+absSetBinOption( "Core" "ExtractLayersSig"           "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Core" "ExtractLayersSigWeak"       "")
+absSetBinOption( "Core" "ExtractPinLayersSig"        "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Core" "AbstractExtractGSpecTable"  "")
+absSetBinOption( "Core" "ExtractNumLevelsSig"        "32")
+absSetBinOption( "Core" "ExtractDistSig"             "")
+absSetBinOption( "Core" "ExtractWidthSig"            "")
+absSetBinOption( "Core" "ExtractMustJoinAlways"      "false")
+absSetBinOption( "Core" "ExtractMustJoinTerminals"   "")
+absSetBinOption( "Core" "ExtractPwr"                 "true")
+absSetBinOption( "Core" "ExtractLayersPwr"           "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Core" "ExtractPinLayersPwr"        "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Core" "AbstractExtractPwrGSpecTable" "")
+absSetBinOption( "Core" "ExtractNumLevelsPwr"        "32")
+absSetBinOption( "Core" "ExtractDistPwr"             "")
+absSetBinOption( "Core" "ExtractWidthPwr"            "")
+absSetBinOption( "Core" "ExtractMustJoinAlwaysPwr"   "false")
+absSetBinOption( "Core" "ExtractMustJoinTerminalsPwr" "")
+absSetBinOption( "Core" "ExtractAntennaHier"         "false")
+absSetBinOption( "Core" "ExtractAntennaSizeInput"    "false")
+absSetBinOption( "Core" "ExtractAntennaSizeOutput"   "false")
+absSetBinOption( "Core" "ExtractAntennaSizeInout"    "false")
+absSetBinOption( "Core" "ExtractAntennaMetalArea"    "false")
+absSetBinOption( "Core" "ExtractAntennaMetalSideArea" "false")
+absSetBinOption( "Core" "CalcAntennaMaxCutCARLowestCut" "false")
+absSetBinOption( "Core" "ExtractAntennaNoAdjust"     "false")
+absSetBinOption( "Core" "ExtractAntennaGate"         "(poly (poly and diff))")
+absSetBinOption( "Core" "ExtractAntennaDrain"        "(diff (diff andnot poly)) ")
+absSetBinOption( "Core" "ExtractAntennaOxide"        "")
+absSetBinOption( "Core" "ExtractAntennaIncludepolyCAR" "false")
+absSetBinOption( "Core" "AbstractAntennaGSpecTable"  "")
+absSetBinOption( "Core" "ExtractDiffAntennaLayers"   "false")
+absSetBinOption( "Core" "ExtractAntennaLayers"       "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Core" "ExtractAntennaGSpecTable"   "")
+absSetBinOption( "Core" "ExtractAntennaExcludeNets"  "")
+absSetBinOption( "Core" "ExtractCache"               "false")
+absSetBinOption( "Core" "ExtractCacheGrid"           "5")
+absSetBinOption( "Core" "ExtractCacheNumGrid"        "50")
+absSetBinOption( "Core" "ExtractCacheUtil"           "0")
+absSetBinOption( "Core" "ExtractCacheUtilPct"        "30")
+absSetBinOption( "Core" "ExtractAdjustInitialPinShapes" "false")
+absSetBinOption( "Core" "ExtractUseNetInfo"          "false")
+absSetBinOption( "Core" "ExtractConnectivity"        "(met1 met2 via)(met2 met3 via2)(met3 met4 via3)(met4 met5 via4)")
+absSetBinOption( "Core" "AbstractAdjustAllowPin"     "")
+absSetBinOption( "Core" "AbstractAdjustAvoidPin"     "")
+absSetBinOption( "Core" "AbstractAdjustPinLPPsGTable" "")
+absSetBinOption( "Core" "AbstractAdjustBoundaryPinsSig" "false")
+absSetBinOption( "Core" "AbstractAdjustBoundaryPinsSigDist" "")
+absSetBinOption( "Core" "AbstractAdjustSignalGeometryGroups" "single")
+absSetBinOption( "Core" "AbstractAdjustSignalGeometryGroupsEastWest" "none")
+absSetBinOption( "Core" "AbstractAdjustBoundaryPinsPwr" "false")
+absSetBinOption( "Core" "AbstractAdjustBoundaryPinsPwrDist" "")
+absSetBinOption( "Core" "AbstractAdjustRingPinsPwr"  "false")
+absSetBinOption( "Core" "AbstractAdjustRingPinsDist" "")
+absSetBinOption( "Core" "AbstractAdjustFollowRingPin" "false")
+absSetBinOption( "Core" "AbstractAdjustPowerGeometryGroups" "single")
+absSetBinOption( "Core" "AbstractAdjustPowerGeometryGroupsEastWest" "none")
+absSetBinOption( "Core" "AbstractAdjustPowerRailOp"  "")
+absSetBinOption( "Core" "AbstractAdjustPowerRailOpTable" "")
+absSetBinOption( "Core" "AbstractAdjustPowerRailWidth" "0")
+absSetBinOption( "Core" "AbstractAdjustEdgeTowardsCore" "north")
+absSetBinOption( "Core" "AbstractAdjustClassCoreNets" "^((V(DD|CC))|(v(dd|cc)))(!)?$")
+absSetBinOption( "Core" "AbstractAdjustIncludeAllShapes" "false")
+absSetBinOption( "Core" "AbstractAdjustCopyClassCorePort" "false")
+absSetBinOption( "Core" "AbstractAdjustPinsTouchBoundary" "false")
+absSetBinOption( "Core" "AbstractAdjustPinsTouchNonCoreEdge" "true")
+absSetBinOption( "Core" "AbstractAdjustCreateClassBumpPort" "false")
+absSetBinOption( "Core" "AbstractAdjustPreserveViasPwr" "false")
+absSetBinOption( "Core" "AbstractAdjustDuplicatePinShapes" "false")
+absSetBinOption( "Core" "AbstractBlockageLayerOrder" "false")
+absSetBinOption( "Core" "AbstractBlockageDetailedLayers" "met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Core" "AbstractBlockageCoverLayers" "met1 met2 met3")
+absSetBinOption( "Core" "AbstractBlockageShrinkWrapLayers" "")
+absSetBinOption( "Core" "AbstractBlockageCoverLayersDist" "")
+absSetBinOption( "Core" "AbstractBlockageShrinkTracks" "")
+absSetBinOption( "Core" "AbstractBlockageShrinkAdjust" "")
+absSetBinOption( "Core" "AbstractBlockagePinCutWindow" "")
+absSetBinOption( "Core" "AbstractBlockageCutForAboveLayers" "")
+absSetBinOption( "Core" "AbstractBlockageDownPinCutWindow" "")
+absSetBinOption( "Core" "AbstractBlockageCutAroundPin" "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Core" "AbstractBlockageMaxRoutingSpace" "")
+absSetBinOption( "Core" "AbstractBlockageCorridorCut" "")
+absSetBinOption( "Core" "AbstractBlockageTable"      "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Core" "BlockageCutVia"             "true")
+absSetBinOption( "Core" "AbstractZeroSpacingBlockage" "false")
+absSetBinOption( "Core" "BlockageLargeShapePct"      "10")
+absSetBinOption( "Core" "BlockageLargeShape"         "true")
+absSetBinOption( "Core" "BlockageLargePurposeList"   "boundary")
+absSetBinOption( "Core" "AbstractBlockageEXCEPTPGNET" "")
+absSetBinOption( "Core" "AbstractBlockageUserDefinedSpacing" "")
+absSetBinOption( "Core" "AbstractBlockageUserDefinedWidth" "")
+absSetBinOption( "Core" "AbstractBlockageUserDefinedDistanceForAddBack" "")
+absSetBinOption( "Core" "AbstractBlockageRoutingChannelOnLayers" "")
+absSetBinOption( "Core" "AbstractTopLayerCoverBlockage" "")
+absSetBinOption( "Core" "AbstractDensity"            "false")
+absSetBinOption( "Core" "AbstractDensityUseSignalLayers" "false")
+absSetBinOption( "Core" "AbstractDensityUseAntennaLayers" "false")
+absSetBinOption( "Core" "AbstractDensityUsePwrLayers" "false")
+absSetBinOption( "Core" "AbstractDensityLayers"      "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Core" "AbstractDensityTable"       "")
+absSetBinOption( "Core" "AbstractDensityWindowWidth" "")
+absSetBinOption( "Core" "AbstractDensityWindowHeight" "")
+absSetBinOption( "Core" "AbstractDensityDefaultWindowWidth" "20")
+absSetBinOption( "Core" "AbstractDensityDefaultWindowHeight" "20")
+absSetBinOption( "Core" "AbstractPinFracture"        "true")
+absSetBinOption( "Core" "AbstractBlockageFracture"   "true")
+absSetBinOption( "Core" "AbstractAdjustStairStepCover" "partial")
+absSetBinOption( "Core" "AbstractAdjustStairStepWidth" "0.024")
+absSetBinOption( "Core" "AbstractSiteName"           "")
+absSetBinOption( "Core" "AbstractSiteNameDefine"     "")
+absSetBinOption( "Core" "AbstractSiteArrayPattern"   "false")
+absSetBinOption( "Core" "AbstractSiteArrayCells"     "")
+absSetBinOption( "Core" "AbstractSiteArrayCellsTable" "")
+absSetBinOption( "Core" "AbstractOverlapLayerAction" "off")
+absSetBinOption( "Core" "AbstractOverlapLayers"      "met1 met2 met3 met4 met5 via via2 via3 via4 poly diff nwell ")
+absSetBinOption( "Core" "AbstractOverlapLayerSize"   "0.024")
+absSetBinOption( "Core" "AbstractOverlapLayerSmoothFactor" "0")
+absSetBinOption( "Core" "AbstractGridMode"           "off")
+absSetBinOption( "Core" "AbstractUpdateTechFile"     "false")
+absSetBinOption( "Core" "AbstractMetal1Pitch"        "0.05")
+absSetBinOption( "Core" "AbstractMetal1Offset"       "0")
+absSetBinOption( "Core" "AbstractMetal2Pitch"        "0.05")
+absSetBinOption( "Core" "AbstractMetal2Offset"       "0")
+absSetBinOption( "Core" "AbstractMetal3Pitch"        "0.05")
+absSetBinOption( "Core" "AbstractMetal3Offset"       "0")
+absSetBinOption( "Core" "AbstractMetal1PitchPercent" "50")
+absSetBinOption( "Core" "AbstractMetal2PitchPercent" "50")
+absSetBinOption( "Core" "AbstractMetal3PitchPercent" "50")
+absSetBinOption( "Core" "AbstractPinAccessMode"      "narrowPin")
+absSetBinOption( "Core" "AbstractDiagonalVias"       "false")
+absSetBinOption( "Core" "AbstractGridDistanceMetric" "euclidean")
+absSetBinOption( "Core" "AbstractRetainLayout"       "false")
+absSetBinOption( "Core" "AbstractPinStretchOutPrb"   "false")
+absSetBinOption( "Core" "VerifyTerminals"            "true")
+absSetBinOption( "Core" "VerifyRowSpacing"           "0")
+absSetBinOption( "Core" "VerifyGrid"                 "true")
+absSetBinOption( "Core" "VerifyTarget"               "true")
+absSetBinOption( "Core" "VerifyTargetSelection"      "Silicon Ensemble")
+absSetBinOption( "Core" "TargetSystemCMD"            "sedsm -m=96 -gd=ansi")
+absSetBinOption( "Core" "VerifyEncounterPromptRegEx" "encounter$")
+absSetBinOption( "Core" "VerifyTargetRowDirection"   "horizontal")
+absSetBinOption( "Core" "VerifyTechFile"             "")
+absSetBinOption( "Core" "VerifyTargetMultiple"       "true")
+absSetBinOption( "Core" "VerifyTargetMultipleRows"   "true")
+absSetBinOption( "Core" "VerifyTargetPower"          "true")
+absSetBinOption( "Core" "VerifySrouteConfigFile"     "")
+absSetBinOption( "Core" "VerifyTargetRouter"         "Nanoroute")
+absSetBinOption( "Core" "VerifyTargetMaxRouteTime"   "1")
+absSetBinOption( "Core" "VerifyConfigFile"           "")
+absSetBinOption( "Core" "VerifyTargetGeom"           "")
+absSetBinOption( "Core" "VerifyTargetIgnore"         "EXCHANGEFORMATS-USER-525\nEXCHANGEFORMATS-USER-392\nEXCHANGEFORMATS-USER-34\nno clock net")
+
+absDeselectBin("IO"   )
+absSetBinOption( "IO"   "PinsTextPinMap"             "")
+absSetBinOption( "IO"   "PinsPowerNames"             "^((V(DD|CC))|(v(dd|cc)))(!)?$")
+absSetBinOption( "IO"   "PinsGroundNames"            "^((VSS|GND)|(vss|gnd))(!)?$")
+absSetBinOption( "IO"   "PinsClockNames"             "")
+absSetBinOption( "IO"   "PinsAnalogNames"            "")
+absSetBinOption( "IO"   "PinsOutputNames"            "")
+absSetBinOption( "IO"   "ExcludeExistingTerminals"   "")
+absSetBinOption( "IO"   "PinsExcludeExistingPinssOnLayers" "")
+absSetBinOption( "IO"   "PinsFromTextForExistingPins" "false")
+absSetBinOption( "IO"   "PinsTextPromoteLevel"       "0")
+absSetBinOption( "IO"   "PinsGeomSearchLevel"        "20")
+absSetBinOption( "IO"   "PinsTextManipulation"       "{\\\\.extra.*} {} :.* {} {\\(([0-9]+)\\)} {<\\1>} {\\[([0-9]+)\\]} {<\\1>}")
+absSetBinOption( "IO"   "PinsTextManipulationTable"  "")
+absSetBinOption( "IO"   "PinsTextPreserveLabels"     "true")
+absSetBinOption( "IO"   "PinsRestrictToPRBndry"      "false")
+absSetBinOption( "IO"   "PinsBoundaryCreate"         "as needed")
+absSetBinOption( "IO"   "PinsBoundaryLayers"         "met1 met2 met3 met4 met5 via via2 via3 via4 poly diff nwell ")
+absSetBinOption( "IO"   "PinsBoundarySizeLeft"       "")
+absSetBinOption( "IO"   "PinsBoundarySizeRight"      "")
+absSetBinOption( "IO"   "PinsBoundarySizeTop"        "")
+absSetBinOption( "IO"   "PinsBoundarySizeBottom"     "")
+absSetBinOption( "IO"   "PinsBoundaryFixedLeft"      "")
+absSetBinOption( "IO"   "PinsBoundaryFixedRight"     "")
+absSetBinOption( "IO"   "PinsBoundaryFixedTop"       "")
+absSetBinOption( "IO"   "PinsBoundaryFixedBottom"    "")
+absSetBinOption( "IO"   "PinsPreserveRoutingBlockages" "false")
+absSetBinOption( "IO"   "PinsCreatePwrPinsFromRouting" "false")
+absSetBinOption( "IO"   "PinsPwrRoutingLayers"       "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "IO"   "PinsCreatepolyPRB"          "false")
+absSetBinOption( "IO"   "ExtractSig"                 "false")
+absSetBinOption( "IO"   "ExtractLayersSig"           "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "IO"   "ExtractLayersSigWeak"       "")
+absSetBinOption( "IO"   "ExtractPinLayersSig"        "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "IO"   "AbstractExtractGSpecTable"  "")
+absSetBinOption( "IO"   "ExtractNumLevelsSig"        "32")
+absSetBinOption( "IO"   "ExtractDistSig"             "")
+absSetBinOption( "IO"   "ExtractWidthSig"            "")
+absSetBinOption( "IO"   "ExtractMustJoinAlways"      "false")
+absSetBinOption( "IO"   "ExtractMustJoinTerminals"   "")
+absSetBinOption( "IO"   "ExtractPwr"                 "false")
+absSetBinOption( "IO"   "ExtractLayersPwr"           "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "IO"   "ExtractPinLayersPwr"        "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "IO"   "AbstractExtractPwrGSpecTable" "")
+absSetBinOption( "IO"   "ExtractNumLevelsPwr"        "32")
+absSetBinOption( "IO"   "ExtractDistPwr"             "")
+absSetBinOption( "IO"   "ExtractWidthPwr"            "")
+absSetBinOption( "IO"   "ExtractMustJoinAlwaysPwr"   "false")
+absSetBinOption( "IO"   "ExtractMustJoinTerminalsPwr" "")
+absSetBinOption( "IO"   "ExtractAntennaHier"         "false")
+absSetBinOption( "IO"   "ExtractAntennaSizeInput"    "false")
+absSetBinOption( "IO"   "ExtractAntennaSizeOutput"   "false")
+absSetBinOption( "IO"   "ExtractAntennaSizeInout"    "false")
+absSetBinOption( "IO"   "ExtractAntennaMetalArea"    "false")
+absSetBinOption( "IO"   "ExtractAntennaMetalSideArea" "false")
+absSetBinOption( "IO"   "CalcAntennaMaxCutCARLowestCut" "false")
+absSetBinOption( "IO"   "ExtractAntennaNoAdjust"     "false")
+absSetBinOption( "IO"   "ExtractAntennaGate"         "(poly (poly and diff))")
+absSetBinOption( "IO"   "ExtractAntennaDrain"        "(diff (diff andnot poly)) ")
+absSetBinOption( "IO"   "ExtractAntennaOxide"        "")
+absSetBinOption( "IO"   "ExtractAntennaIncludepolyCAR" "false")
+absSetBinOption( "IO"   "AbstractAntennaGSpecTable"  "")
+absSetBinOption( "IO"   "ExtractDiffAntennaLayers"   "false")
+absSetBinOption( "IO"   "ExtractAntennaLayers"       "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "IO"   "ExtractAntennaGSpecTable"   "")
+absSetBinOption( "IO"   "ExtractAntennaExcludeNets"  "")
+absSetBinOption( "IO"   "ExtractCache"               "false")
+absSetBinOption( "IO"   "ExtractCacheGrid"           "5")
+absSetBinOption( "IO"   "ExtractCacheNumGrid"        "50")
+absSetBinOption( "IO"   "ExtractCacheUtil"           "0")
+absSetBinOption( "IO"   "ExtractCacheUtilPct"        "30")
+absSetBinOption( "IO"   "ExtractAdjustInitialPinShapes" "false")
+absSetBinOption( "IO"   "ExtractUseNetInfo"          "false")
+absSetBinOption( "IO"   "ExtractConnectivity"        "(met1 met2 via)(met2 met3 via2)(met3 met4 via3)(met4 met5 via4)")
+absSetBinOption( "IO"   "AbstractAdjustAllowPin"     "")
+absSetBinOption( "IO"   "AbstractAdjustAvoidPin"     "")
+absSetBinOption( "IO"   "AbstractAdjustPinLPPsGTable" "")
+absSetBinOption( "IO"   "AbstractAdjustBoundaryPinsSig" "false")
+absSetBinOption( "IO"   "AbstractAdjustBoundaryPinsSigDist" "")
+absSetBinOption( "IO"   "AbstractAdjustSignalGeometryGroups" "single")
+absSetBinOption( "IO"   "AbstractAdjustSignalGeometryGroupsEastWest" "none")
+absSetBinOption( "IO"   "AbstractAdjustBoundaryPinsPwr" "false")
+absSetBinOption( "IO"   "AbstractAdjustBoundaryPinsPwrDist" "")
+absSetBinOption( "IO"   "AbstractAdjustRingPinsPwr"  "false")
+absSetBinOption( "IO"   "AbstractAdjustRingPinsDist" "")
+absSetBinOption( "IO"   "AbstractAdjustFollowRingPin" "false")
+absSetBinOption( "IO"   "AbstractAdjustPowerGeometryGroups" "single")
+absSetBinOption( "IO"   "AbstractAdjustPowerGeometryGroupsEastWest" "none")
+absSetBinOption( "IO"   "AbstractAdjustPowerRailOp"  "")
+absSetBinOption( "IO"   "AbstractAdjustPowerRailOpTable" "")
+absSetBinOption( "IO"   "AbstractAdjustPowerRailWidth" "0")
+absSetBinOption( "IO"   "AbstractAdjustEdgeTowardsCore" "north")
+absSetBinOption( "IO"   "AbstractAdjustClassCoreNets" "^((V(DD|CC))|(v(dd|cc)))(!)?$")
+absSetBinOption( "IO"   "AbstractAdjustIncludeAllShapes" "false")
+absSetBinOption( "IO"   "AbstractAdjustCopyClassCorePort" "false")
+absSetBinOption( "IO"   "AbstractAdjustPinsTouchBoundary" "false")
+absSetBinOption( "IO"   "AbstractAdjustPinsTouchNonCoreEdge" "true")
+absSetBinOption( "IO"   "AbstractAdjustCreateClassBumpPort" "false")
+absSetBinOption( "IO"   "AbstractAdjustPreserveViasPwr" "false")
+absSetBinOption( "IO"   "AbstractAdjustDuplicatePinShapes" "false")
+absSetBinOption( "IO"   "AbstractBlockageLayerOrder" "false")
+absSetBinOption( "IO"   "AbstractBlockageDetailedLayers" "")
+absSetBinOption( "IO"   "AbstractBlockageCoverLayers" "met1 met2 met3 met4 met5 ")
+absSetBinOption( "IO"   "AbstractBlockageShrinkWrapLayers" "")
+absSetBinOption( "IO"   "AbstractBlockageCoverLayersDist" "")
+absSetBinOption( "IO"   "AbstractBlockageShrinkTracks" "")
+absSetBinOption( "IO"   "AbstractBlockageShrinkAdjust" "")
+absSetBinOption( "IO"   "AbstractBlockagePinCutWindow" "")
+absSetBinOption( "IO"   "AbstractBlockageCutForAboveLayers" "")
+absSetBinOption( "IO"   "AbstractBlockageDownPinCutWindow" "")
+absSetBinOption( "IO"   "AbstractBlockageCutAroundPin" "met1 met2 met3 met4 met5 ")
+absSetBinOption( "IO"   "AbstractBlockageMaxRoutingSpace" "")
+absSetBinOption( "IO"   "AbstractBlockageCorridorCut" "")
+absSetBinOption( "IO"   "AbstractBlockageTable"      "met1 met2 met3 met4 met5 ")
+absSetBinOption( "IO"   "BlockageCutVia"             "true")
+absSetBinOption( "IO"   "AbstractZeroSpacingBlockage" "false")
+absSetBinOption( "IO"   "BlockageLargeShapePct"      "10")
+absSetBinOption( "IO"   "BlockageLargeShape"         "true")
+absSetBinOption( "IO"   "BlockageLargePurposeList"   "boundary")
+absSetBinOption( "IO"   "AbstractBlockageEXCEPTPGNET" "")
+absSetBinOption( "IO"   "AbstractBlockageUserDefinedSpacing" "")
+absSetBinOption( "IO"   "AbstractBlockageUserDefinedWidth" "")
+absSetBinOption( "IO"   "AbstractBlockageUserDefinedDistanceForAddBack" "")
+absSetBinOption( "IO"   "AbstractBlockageRoutingChannelOnLayers" "")
+absSetBinOption( "IO"   "AbstractTopLayerCoverBlockage" "")
+absSetBinOption( "IO"   "AbstractDensity"            "false")
+absSetBinOption( "IO"   "AbstractDensityUseSignalLayers" "false")
+absSetBinOption( "IO"   "AbstractDensityUseAntennaLayers" "false")
+absSetBinOption( "IO"   "AbstractDensityUsePwrLayers" "false")
+absSetBinOption( "IO"   "AbstractDensityLayers"      "met1 met2 met3 met4 met5 ")
+absSetBinOption( "IO"   "AbstractDensityTable"       "")
+absSetBinOption( "IO"   "AbstractDensityWindowWidth" "")
+absSetBinOption( "IO"   "AbstractDensityWindowHeight" "")
+absSetBinOption( "IO"   "AbstractDensityDefaultWindowWidth" "20")
+absSetBinOption( "IO"   "AbstractDensityDefaultWindowHeight" "20")
+absSetBinOption( "IO"   "AbstractPinFracture"        "true")
+absSetBinOption( "IO"   "AbstractBlockageFracture"   "true")
+absSetBinOption( "IO"   "AbstractAdjustStairStepCover" "partial")
+absSetBinOption( "IO"   "AbstractAdjustStairStepWidth" "0.024")
+absSetBinOption( "IO"   "AbstractSiteName"           "")
+absSetBinOption( "IO"   "AbstractSiteNameDefine"     "")
+absSetBinOption( "IO"   "AbstractSiteArrayPattern"   "false")
+absSetBinOption( "IO"   "AbstractSiteArrayCells"     "")
+absSetBinOption( "IO"   "AbstractSiteArrayCellsTable" "")
+absSetBinOption( "IO"   "AbstractOverlapLayerAction" "off")
+absSetBinOption( "IO"   "AbstractOverlapLayers"      "")
+absSetBinOption( "IO"   "AbstractOverlapLayerSize"   "0")
+absSetBinOption( "IO"   "AbstractOverlapLayerSmoothFactor" "0")
+absSetBinOption( "IO"   "AbstractGridMode"           "off")
+absSetBinOption( "IO"   "AbstractUpdateTechFile"     "false")
+absSetBinOption( "IO"   "AbstractMetal1Pitch"        "0.05")
+absSetBinOption( "IO"   "AbstractMetal1Offset"       "0")
+absSetBinOption( "IO"   "AbstractMetal2Pitch"        "0.05")
+absSetBinOption( "IO"   "AbstractMetal2Offset"       "0")
+absSetBinOption( "IO"   "AbstractMetal3Pitch"        "0.05")
+absSetBinOption( "IO"   "AbstractMetal3Offset"       "0")
+absSetBinOption( "IO"   "AbstractMetal1PitchPercent" "50")
+absSetBinOption( "IO"   "AbstractMetal2PitchPercent" "50")
+absSetBinOption( "IO"   "AbstractMetal3PitchPercent" "50")
+absSetBinOption( "IO"   "AbstractPinAccessMode"      "narrowPin")
+absSetBinOption( "IO"   "AbstractDiagonalVias"       "false")
+absSetBinOption( "IO"   "AbstractGridDistanceMetric" "euclidean")
+absSetBinOption( "IO"   "AbstractRetainLayout"       "false")
+absSetBinOption( "IO"   "AbstractPinStretchOutPrb"   "false")
+absSetBinOption( "IO"   "VerifyTerminals"            "true")
+absSetBinOption( "IO"   "VerifyRowSpacing"           "0")
+absSetBinOption( "IO"   "VerifyGrid"                 "true")
+absSetBinOption( "IO"   "VerifyTarget"               "true")
+absSetBinOption( "IO"   "VerifyTargetSelection"      "Silicon Ensemble")
+absSetBinOption( "IO"   "TargetSystemCMD"            "sedsm -m=96 -gd=ansi")
+absSetBinOption( "IO"   "VerifyEncounterPromptRegEx" "encounter$")
+absSetBinOption( "IO"   "VerifyTargetRowDirection"   "horizontal")
+absSetBinOption( "IO"   "VerifyTechFile"             "")
+absSetBinOption( "IO"   "VerifyTargetMultiple"       "false")
+absSetBinOption( "IO"   "VerifyTargetMultipleRows"   "false")
+absSetBinOption( "IO"   "VerifyTargetPower"          "false")
+absSetBinOption( "IO"   "VerifySrouteConfigFile"     "")
+absSetBinOption( "IO"   "VerifyTargetRouter"         "Nanoroute")
+absSetBinOption( "IO"   "VerifyTargetMaxRouteTime"   "1")
+absSetBinOption( "IO"   "VerifyConfigFile"           "")
+absSetBinOption( "IO"   "VerifyTargetGeom"           "")
+absSetBinOption( "IO"   "VerifyTargetIgnore"         "EXCHANGEFORMATS-USER-525\nEXCHANGEFORMATS-USER-392\nEXCHANGEFORMATS-USER-34\nno clock net")
+
+absDeselectBin("Corner" )
+absSetBinOption( "Corner" "PinsTextPinMap"             "")
+absSetBinOption( "Corner" "PinsPowerNames"             "^((V(DD|CC))|(v(dd|cc)))(!)?$")
+absSetBinOption( "Corner" "PinsGroundNames"            "^((VSS|GND)|(vss|gnd))(!)?$")
+absSetBinOption( "Corner" "PinsClockNames"             "")
+absSetBinOption( "Corner" "PinsAnalogNames"            "")
+absSetBinOption( "Corner" "PinsOutputNames"            "")
+absSetBinOption( "Corner" "ExcludeExistingTerminals"   "")
+absSetBinOption( "Corner" "PinsExcludeExistingPinssOnLayers" "")
+absSetBinOption( "Corner" "PinsFromTextForExistingPins" "false")
+absSetBinOption( "Corner" "PinsTextPromoteLevel"       "0")
+absSetBinOption( "Corner" "PinsGeomSearchLevel"        "20")
+absSetBinOption( "Corner" "PinsTextManipulation"       "{\\\\.extra.*} {} :.* {} {\\(([0-9]+)\\)} {<\\1>} {\\[([0-9]+)\\]} {<\\1>}")
+absSetBinOption( "Corner" "PinsTextManipulationTable"  "")
+absSetBinOption( "Corner" "PinsTextPreserveLabels"     "true")
+absSetBinOption( "Corner" "PinsRestrictToPRBndry"      "false")
+absSetBinOption( "Corner" "PinsBoundaryCreate"         "as needed")
+absSetBinOption( "Corner" "PinsBoundaryLayers"         "met1 met2 met3 met4 met5 via via2 via3 via4 poly diff nwell ")
+absSetBinOption( "Corner" "PinsBoundarySizeLeft"       "")
+absSetBinOption( "Corner" "PinsBoundarySizeRight"      "")
+absSetBinOption( "Corner" "PinsBoundarySizeTop"        "")
+absSetBinOption( "Corner" "PinsBoundarySizeBottom"     "")
+absSetBinOption( "Corner" "PinsBoundaryFixedLeft"      "")
+absSetBinOption( "Corner" "PinsBoundaryFixedRight"     "")
+absSetBinOption( "Corner" "PinsBoundaryFixedTop"       "")
+absSetBinOption( "Corner" "PinsBoundaryFixedBottom"    "")
+absSetBinOption( "Corner" "PinsPreserveRoutingBlockages" "false")
+absSetBinOption( "Corner" "PinsCreatePwrPinsFromRouting" "false")
+absSetBinOption( "Corner" "PinsPwrRoutingLayers"       "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Corner" "PinsCreatepolyPRB"          "false")
+absSetBinOption( "Corner" "ExtractSig"                 "false")
+absSetBinOption( "Corner" "ExtractLayersSig"           "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Corner" "ExtractLayersSigWeak"       "")
+absSetBinOption( "Corner" "ExtractPinLayersSig"        "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Corner" "AbstractExtractGSpecTable"  "")
+absSetBinOption( "Corner" "ExtractNumLevelsSig"        "32")
+absSetBinOption( "Corner" "ExtractDistSig"             "")
+absSetBinOption( "Corner" "ExtractWidthSig"            "")
+absSetBinOption( "Corner" "ExtractMustJoinAlways"      "false")
+absSetBinOption( "Corner" "ExtractMustJoinTerminals"   "")
+absSetBinOption( "Corner" "ExtractPwr"                 "false")
+absSetBinOption( "Corner" "ExtractLayersPwr"           "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Corner" "ExtractPinLayersPwr"        "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Corner" "AbstractExtractPwrGSpecTable" "")
+absSetBinOption( "Corner" "ExtractNumLevelsPwr"        "32")
+absSetBinOption( "Corner" "ExtractDistPwr"             "")
+absSetBinOption( "Corner" "ExtractWidthPwr"            "")
+absSetBinOption( "Corner" "ExtractMustJoinAlwaysPwr"   "false")
+absSetBinOption( "Corner" "ExtractMustJoinTerminalsPwr" "")
+absSetBinOption( "Corner" "ExtractAntennaHier"         "false")
+absSetBinOption( "Corner" "ExtractAntennaSizeInput"    "false")
+absSetBinOption( "Corner" "ExtractAntennaSizeOutput"   "false")
+absSetBinOption( "Corner" "ExtractAntennaSizeInout"    "false")
+absSetBinOption( "Corner" "ExtractAntennaMetalArea"    "false")
+absSetBinOption( "Corner" "ExtractAntennaMetalSideArea" "false")
+absSetBinOption( "Corner" "CalcAntennaMaxCutCARLowestCut" "false")
+absSetBinOption( "Corner" "ExtractAntennaNoAdjust"     "false")
+absSetBinOption( "Corner" "ExtractAntennaGate"         "(poly (poly and diff))")
+absSetBinOption( "Corner" "ExtractAntennaDrain"        "(diff (diff andnot poly)) ")
+absSetBinOption( "Corner" "ExtractAntennaOxide"        "")
+absSetBinOption( "Corner" "ExtractAntennaIncludepolyCAR" "false")
+absSetBinOption( "Corner" "AbstractAntennaGSpecTable"  "")
+absSetBinOption( "Corner" "ExtractDiffAntennaLayers"   "false")
+absSetBinOption( "Corner" "ExtractAntennaLayers"       "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Corner" "ExtractAntennaGSpecTable"   "")
+absSetBinOption( "Corner" "ExtractAntennaExcludeNets"  "")
+absSetBinOption( "Corner" "ExtractCache"               "false")
+absSetBinOption( "Corner" "ExtractCacheGrid"           "5")
+absSetBinOption( "Corner" "ExtractCacheNumGrid"        "50")
+absSetBinOption( "Corner" "ExtractCacheUtil"           "0")
+absSetBinOption( "Corner" "ExtractCacheUtilPct"        "30")
+absSetBinOption( "Corner" "ExtractAdjustInitialPinShapes" "false")
+absSetBinOption( "Corner" "ExtractUseNetInfo"          "false")
+absSetBinOption( "Corner" "ExtractConnectivity"        "(met1 met2 via)(met2 met3 via2)(met3 met4 via3)(met4 met5 via4)")
+absSetBinOption( "Corner" "AbstractAdjustAllowPin"     "")
+absSetBinOption( "Corner" "AbstractAdjustAvoidPin"     "")
+absSetBinOption( "Corner" "AbstractAdjustPinLPPsGTable" "")
+absSetBinOption( "Corner" "AbstractAdjustBoundaryPinsSig" "false")
+absSetBinOption( "Corner" "AbstractAdjustBoundaryPinsSigDist" "")
+absSetBinOption( "Corner" "AbstractAdjustSignalGeometryGroups" "single")
+absSetBinOption( "Corner" "AbstractAdjustSignalGeometryGroupsEastWest" "none")
+absSetBinOption( "Corner" "AbstractAdjustBoundaryPinsPwr" "false")
+absSetBinOption( "Corner" "AbstractAdjustBoundaryPinsPwrDist" "")
+absSetBinOption( "Corner" "AbstractAdjustRingPinsPwr"  "false")
+absSetBinOption( "Corner" "AbstractAdjustRingPinsDist" "")
+absSetBinOption( "Corner" "AbstractAdjustFollowRingPin" "false")
+absSetBinOption( "Corner" "AbstractAdjustPowerGeometryGroups" "single")
+absSetBinOption( "Corner" "AbstractAdjustPowerGeometryGroupsEastWest" "none")
+absSetBinOption( "Corner" "AbstractAdjustPowerRailOp"  "")
+absSetBinOption( "Corner" "AbstractAdjustPowerRailOpTable" "")
+absSetBinOption( "Corner" "AbstractAdjustPowerRailWidth" "0")
+absSetBinOption( "Corner" "AbstractAdjustEdgeTowardsCore" "north")
+absSetBinOption( "Corner" "AbstractAdjustClassCoreNets" "^((V(DD|CC))|(v(dd|cc)))(!)?$")
+absSetBinOption( "Corner" "AbstractAdjustIncludeAllShapes" "false")
+absSetBinOption( "Corner" "AbstractAdjustCopyClassCorePort" "false")
+absSetBinOption( "Corner" "AbstractAdjustPinsTouchBoundary" "false")
+absSetBinOption( "Corner" "AbstractAdjustPinsTouchNonCoreEdge" "true")
+absSetBinOption( "Corner" "AbstractAdjustCreateClassBumpPort" "false")
+absSetBinOption( "Corner" "AbstractAdjustPreserveViasPwr" "false")
+absSetBinOption( "Corner" "AbstractAdjustDuplicatePinShapes" "false")
+absSetBinOption( "Corner" "AbstractBlockageLayerOrder" "false")
+absSetBinOption( "Corner" "AbstractBlockageDetailedLayers" "")
+absSetBinOption( "Corner" "AbstractBlockageCoverLayers" "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Corner" "AbstractBlockageShrinkWrapLayers" "")
+absSetBinOption( "Corner" "AbstractBlockageCoverLayersDist" "")
+absSetBinOption( "Corner" "AbstractBlockageShrinkTracks" "")
+absSetBinOption( "Corner" "AbstractBlockageShrinkAdjust" "")
+absSetBinOption( "Corner" "AbstractBlockagePinCutWindow" "")
+absSetBinOption( "Corner" "AbstractBlockageCutForAboveLayers" "")
+absSetBinOption( "Corner" "AbstractBlockageDownPinCutWindow" "")
+absSetBinOption( "Corner" "AbstractBlockageCutAroundPin" "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Corner" "AbstractBlockageMaxRoutingSpace" "")
+absSetBinOption( "Corner" "AbstractBlockageCorridorCut" "")
+absSetBinOption( "Corner" "AbstractBlockageTable"      "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Corner" "BlockageCutVia"             "true")
+absSetBinOption( "Corner" "AbstractZeroSpacingBlockage" "false")
+absSetBinOption( "Corner" "BlockageLargeShapePct"      "10")
+absSetBinOption( "Corner" "BlockageLargeShape"         "true")
+absSetBinOption( "Corner" "BlockageLargePurposeList"   "boundary")
+absSetBinOption( "Corner" "AbstractBlockageEXCEPTPGNET" "")
+absSetBinOption( "Corner" "AbstractBlockageUserDefinedSpacing" "")
+absSetBinOption( "Corner" "AbstractBlockageUserDefinedWidth" "")
+absSetBinOption( "Corner" "AbstractBlockageUserDefinedDistanceForAddBack" "")
+absSetBinOption( "Corner" "AbstractBlockageRoutingChannelOnLayers" "")
+absSetBinOption( "Corner" "AbstractTopLayerCoverBlockage" "")
+absSetBinOption( "Corner" "AbstractDensity"            "false")
+absSetBinOption( "Corner" "AbstractDensityUseSignalLayers" "false")
+absSetBinOption( "Corner" "AbstractDensityUseAntennaLayers" "false")
+absSetBinOption( "Corner" "AbstractDensityUsePwrLayers" "false")
+absSetBinOption( "Corner" "AbstractDensityLayers"      "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Corner" "AbstractDensityTable"       "")
+absSetBinOption( "Corner" "AbstractDensityWindowWidth" "")
+absSetBinOption( "Corner" "AbstractDensityWindowHeight" "")
+absSetBinOption( "Corner" "AbstractDensityDefaultWindowWidth" "20")
+absSetBinOption( "Corner" "AbstractDensityDefaultWindowHeight" "20")
+absSetBinOption( "Corner" "AbstractPinFracture"        "true")
+absSetBinOption( "Corner" "AbstractBlockageFracture"   "true")
+absSetBinOption( "Corner" "AbstractAdjustStairStepCover" "partial")
+absSetBinOption( "Corner" "AbstractAdjustStairStepWidth" "0.024")
+absSetBinOption( "Corner" "AbstractSiteName"           "")
+absSetBinOption( "Corner" "AbstractSiteNameDefine"     "")
+absSetBinOption( "Corner" "AbstractSiteArrayPattern"   "false")
+absSetBinOption( "Corner" "AbstractSiteArrayCells"     "")
+absSetBinOption( "Corner" "AbstractSiteArrayCellsTable" "")
+absSetBinOption( "Corner" "AbstractOverlapLayerAction" "off")
+absSetBinOption( "Corner" "AbstractOverlapLayers"      "")
+absSetBinOption( "Corner" "AbstractOverlapLayerSize"   "0")
+absSetBinOption( "Corner" "AbstractOverlapLayerSmoothFactor" "0")
+absSetBinOption( "Corner" "AbstractGridMode"           "off")
+absSetBinOption( "Corner" "AbstractUpdateTechFile"     "false")
+absSetBinOption( "Corner" "AbstractMetal1Pitch"        "0.05")
+absSetBinOption( "Corner" "AbstractMetal1Offset"       "0")
+absSetBinOption( "Corner" "AbstractMetal2Pitch"        "0.05")
+absSetBinOption( "Corner" "AbstractMetal2Offset"       "0")
+absSetBinOption( "Corner" "AbstractMetal3Pitch"        "0.05")
+absSetBinOption( "Corner" "AbstractMetal3Offset"       "0")
+absSetBinOption( "Corner" "AbstractMetal1PitchPercent" "50")
+absSetBinOption( "Corner" "AbstractMetal2PitchPercent" "50")
+absSetBinOption( "Corner" "AbstractMetal3PitchPercent" "50")
+absSetBinOption( "Corner" "AbstractPinAccessMode"      "narrowPin")
+absSetBinOption( "Corner" "AbstractDiagonalVias"       "false")
+absSetBinOption( "Corner" "AbstractGridDistanceMetric" "euclidean")
+absSetBinOption( "Corner" "AbstractRetainLayout"       "false")
+absSetBinOption( "Corner" "AbstractPinStretchOutPrb"   "false")
+absSetBinOption( "Corner" "VerifyTerminals"            "true")
+absSetBinOption( "Corner" "VerifyRowSpacing"           "0")
+absSetBinOption( "Corner" "VerifyGrid"                 "true")
+absSetBinOption( "Corner" "VerifyTarget"               "true")
+absSetBinOption( "Corner" "VerifyTargetSelection"      "Silicon Ensemble")
+absSetBinOption( "Corner" "TargetSystemCMD"            "sedsm -m=96 -gd=ansi")
+absSetBinOption( "Corner" "VerifyEncounterPromptRegEx" "encounter$")
+absSetBinOption( "Corner" "VerifyTargetRowDirection"   "horizontal")
+absSetBinOption( "Corner" "VerifyTechFile"             "")
+absSetBinOption( "Corner" "VerifyTargetMultiple"       "false")
+absSetBinOption( "Corner" "VerifyTargetMultipleRows"   "false")
+absSetBinOption( "Corner" "VerifyTargetPower"          "false")
+absSetBinOption( "Corner" "VerifySrouteConfigFile"     "")
+absSetBinOption( "Corner" "VerifyTargetRouter"         "Nanoroute")
+absSetBinOption( "Corner" "VerifyTargetMaxRouteTime"   "1")
+absSetBinOption( "Corner" "VerifyConfigFile"           "")
+absSetBinOption( "Corner" "VerifyTargetGeom"           "")
+absSetBinOption( "Corner" "VerifyTargetIgnore"         "EXCHANGEFORMATS-USER-525\nEXCHANGEFORMATS-USER-392\nEXCHANGEFORMATS-USER-34\nno clock net")
+
+absSelectBin("Block" )
+absSetBinOption( "Block" "PinsTextPinMap"             "(met5 met5) (met4 met4) (met3 met3) (met2 met2) (met1 met1)")
+absSetBinOption( "Block" "PinsPowerNames"             "^((V(DD|CC))|(v(dd|cc)))(!)?$")
+absSetBinOption( "Block" "PinsGroundNames"            "^((VSS|GND)|(vss|gnd))(!)?$")
+absSetBinOption( "Block" "PinsClockNames"             "clk")
+absSetBinOption( "Block" "PinsAnalogNames"            "")
+absSetBinOption( "Block" "PinsOutputNames"            "out")
+absSetBinOption( "Block" "ExcludeExistingTerminals"   ".*")
+absSetBinOption( "Block" "PinsExcludeExistingPinssOnLayers" "")
+absSetBinOption( "Block" "PinsFromTextForExistingPins" "false")
+absSetBinOption( "Block" "PinsTextPromoteLevel"       "0")
+absSetBinOption( "Block" "PinsGeomSearchLevel"        "20")
+absSetBinOption( "Block" "PinsTextManipulation"       "{\\\\.extra.*} {} :.* {} {\\(([0-9]+)\\)} {<\\1>} {\\[([0-9]+)\\]} {<\\1>}")
+absSetBinOption( "Block" "PinsTextManipulationTable"  "")
+absSetBinOption( "Block" "PinsTextPreserveLabels"     "true")
+absSetBinOption( "Block" "PinsRestrictToPRBndry"      "false")
+absSetBinOption( "Block" "PinsBoundaryCreate"         "as needed")
+absSetBinOption( "Block" "PinsBoundaryLayers"         "met1 met2 met3 met4 met5 via via2 via3 via4 poly diff nwell ")
+absSetBinOption( "Block" "PinsBoundarySizeLeft"       "")
+absSetBinOption( "Block" "PinsBoundarySizeRight"      "")
+absSetBinOption( "Block" "PinsBoundarySizeTop"        "")
+absSetBinOption( "Block" "PinsBoundarySizeBottom"     "")
+absSetBinOption( "Block" "PinsBoundaryFixedLeft"      "")
+absSetBinOption( "Block" "PinsBoundaryFixedRight"     "")
+absSetBinOption( "Block" "PinsBoundaryFixedTop"       "")
+absSetBinOption( "Block" "PinsBoundaryFixedBottom"    "")
+absSetBinOption( "Block" "PinsPreserveRoutingBlockages" "false")
+absSetBinOption( "Block" "PinsCreatePwrPinsFromRouting" "false")
+absSetBinOption( "Block" "PinsPwrRoutingLayers"       "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Block" "PinsCreatepolyPRB"          "false")
+absSetBinOption( "Block" "ExtractSig"                 "true")
+absSetBinOption( "Block" "ExtractLayersSig"           "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Block" "ExtractLayersSigWeak"       "")
+absSetBinOption( "Block" "ExtractPinLayersSig"        "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Block" "AbstractExtractGSpecTable"  "")
+absSetBinOption( "Block" "ExtractNumLevelsSig"        "32")
+absSetBinOption( "Block" "ExtractDistSig"             "")
+absSetBinOption( "Block" "ExtractWidthSig"            "")
+absSetBinOption( "Block" "ExtractMustJoinAlways"      "false")
+absSetBinOption( "Block" "ExtractMustJoinTerminals"   "")
+absSetBinOption( "Block" "ExtractPwr"                 "true")
+absSetBinOption( "Block" "ExtractLayersPwr"           "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Block" "ExtractPinLayersPwr"        "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Block" "AbstractExtractPwrGSpecTable" "")
+absSetBinOption( "Block" "ExtractNumLevelsPwr"        "32")
+absSetBinOption( "Block" "ExtractDistPwr"             "")
+absSetBinOption( "Block" "ExtractWidthPwr"            "")
+absSetBinOption( "Block" "ExtractMustJoinAlwaysPwr"   "false")
+absSetBinOption( "Block" "ExtractMustJoinTerminalsPwr" "")
+absSetBinOption( "Block" "ExtractAntennaHier"         "false")
+absSetBinOption( "Block" "ExtractAntennaSizeInput"    "false")
+absSetBinOption( "Block" "ExtractAntennaSizeOutput"   "false")
+absSetBinOption( "Block" "ExtractAntennaSizeInout"    "false")
+absSetBinOption( "Block" "ExtractAntennaMetalArea"    "false")
+absSetBinOption( "Block" "ExtractAntennaMetalSideArea" "false")
+absSetBinOption( "Block" "CalcAntennaMaxCutCARLowestCut" "false")
+absSetBinOption( "Block" "ExtractAntennaNoAdjust"     "false")
+absSetBinOption( "Block" "ExtractAntennaGate"         "(poly (poly and diff)) ")
+absSetBinOption( "Block" "ExtractAntennaDrain"        "(diff (diff andnot poly)) ")
+absSetBinOption( "Block" "ExtractAntennaOxide"        "")
+absSetBinOption( "Block" "ExtractAntennaIncludepolyCAR" "false")
+absSetBinOption( "Block" "AbstractAntennaGSpecTable"  "")
+absSetBinOption( "Block" "ExtractDiffAntennaLayers"   "false")
+absSetBinOption( "Block" "ExtractAntennaLayers"       "met1 met2 met3 met4 met5 via via2 via3 via4 ")
+absSetBinOption( "Block" "ExtractAntennaGSpecTable"   "")
+absSetBinOption( "Block" "ExtractAntennaExcludeNets"  "")
+absSetBinOption( "Block" "ExtractCache"               "false")
+absSetBinOption( "Block" "ExtractCacheGrid"           "5")
+absSetBinOption( "Block" "ExtractCacheNumGrid"        "50")
+absSetBinOption( "Block" "ExtractCacheUtil"           "0")
+absSetBinOption( "Block" "ExtractCacheUtilPct"        "30")
+absSetBinOption( "Block" "ExtractAdjustInitialPinShapes" "false")
+absSetBinOption( "Block" "ExtractUseNetInfo"          "false")
+absSetBinOption( "Block" "ExtractConnectivity"        "(met1 met2 via)(met2 met3 via2)(met3 met4 via3)(met4 met5 via4)")
+absSetBinOption( "Block" "AbstractAdjustAllowPin"     "")
+absSetBinOption( "Block" "AbstractAdjustAvoidPin"     "")
+absSetBinOption( "Block" "AbstractAdjustPinLPPsGTable" "")
+absSetBinOption( "Block" "AbstractAdjustBoundaryPinsSig" "true")
+absSetBinOption( "Block" "AbstractAdjustBoundaryPinsSigDist" "")
+absSetBinOption( "Block" "AbstractAdjustSignalGeometryGroups" "overlap")
+absSetBinOption( "Block" "AbstractAdjustSignalGeometryGroupsEastWest" "overlap")
+absSetBinOption( "Block" "AbstractAdjustBoundaryPinsPwr" "false")
+absSetBinOption( "Block" "AbstractAdjustBoundaryPinsPwrDist" "")
+absSetBinOption( "Block" "AbstractAdjustRingPinsPwr"  "false")
+absSetBinOption( "Block" "AbstractAdjustRingPinsDist" "")
+absSetBinOption( "Block" "AbstractAdjustFollowRingPin" "false")
+absSetBinOption( "Block" "AbstractAdjustPowerGeometryGroups" "single")
+absSetBinOption( "Block" "AbstractAdjustPowerGeometryGroupsEastWest" "overlap")
+absSetBinOption( "Block" "AbstractAdjustPowerRailOp"  "")
+absSetBinOption( "Block" "AbstractAdjustPowerRailOpTable" "")
+absSetBinOption( "Block" "AbstractAdjustPowerRailWidth" "0")
+absSetBinOption( "Block" "AbstractAdjustEdgeTowardsCore" "north")
+absSetBinOption( "Block" "AbstractAdjustClassCoreNets" "^((V(DD|CC))|(v(dd|cc)))(!)?$")
+absSetBinOption( "Block" "AbstractAdjustIncludeAllShapes" "false")
+absSetBinOption( "Block" "AbstractAdjustCopyClassCorePort" "false")
+absSetBinOption( "Block" "AbstractAdjustPinsTouchBoundary" "false")
+absSetBinOption( "Block" "AbstractAdjustPinsTouchNonCoreEdge" "true")
+absSetBinOption( "Block" "AbstractAdjustCreateClassBumpPort" "false")
+absSetBinOption( "Block" "AbstractAdjustPreserveViasPwr" "false")
+absSetBinOption( "Block" "AbstractAdjustDuplicatePinShapes" "false")
+absSetBinOption( "Block" "AbstractBlockageLayerOrder" "false")
+absSetBinOption( "Block" "AbstractBlockageDetailedLayers" "")
+absSetBinOption( "Block" "AbstractBlockageCoverLayers" "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Block" "AbstractBlockageShrinkWrapLayers" "")
+absSetBinOption( "Block" "AbstractBlockageCoverLayersDist" "")
+absSetBinOption( "Block" "AbstractBlockageShrinkTracks" "")
+absSetBinOption( "Block" "AbstractBlockageShrinkAdjust" "")
+absSetBinOption( "Block" "AbstractBlockagePinCutWindow" "")
+absSetBinOption( "Block" "AbstractBlockageCutForAboveLayers" "")
+absSetBinOption( "Block" "AbstractBlockageDownPinCutWindow" "")
+absSetBinOption( "Block" "AbstractBlockageCutAroundPin" "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Block" "AbstractBlockageMaxRoutingSpace" "")
+absSetBinOption( "Block" "AbstractBlockageCorridorCut" "")
+absSetBinOption( "Block" "AbstractBlockageTable"      "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Block" "BlockageCutVia"             "true")
+absSetBinOption( "Block" "AbstractZeroSpacingBlockage" "false")
+absSetBinOption( "Block" "BlockageLargeShapePct"      "10")
+absSetBinOption( "Block" "BlockageLargeShape"         "true")
+absSetBinOption( "Block" "BlockageLargePurposeList"   "boundary")
+absSetBinOption( "Block" "AbstractBlockageEXCEPTPGNET" "")
+absSetBinOption( "Block" "AbstractBlockageUserDefinedSpacing" "")
+absSetBinOption( "Block" "AbstractBlockageUserDefinedWidth" "")
+absSetBinOption( "Block" "AbstractBlockageUserDefinedDistanceForAddBack" "")
+absSetBinOption( "Block" "AbstractBlockageRoutingChannelOnLayers" "")
+absSetBinOption( "Block" "AbstractTopLayerCoverBlockage" "")
+absSetBinOption( "Block" "AbstractDensity"            "false")
+absSetBinOption( "Block" "AbstractDensityUseSignalLayers" "false")
+absSetBinOption( "Block" "AbstractDensityUseAntennaLayers" "false")
+absSetBinOption( "Block" "AbstractDensityUsePwrLayers" "false")
+absSetBinOption( "Block" "AbstractDensityLayers"      "met1 met2 met3 met4 met5 ")
+absSetBinOption( "Block" "AbstractDensityTable"       "")
+absSetBinOption( "Block" "AbstractDensityWindowWidth" "")
+absSetBinOption( "Block" "AbstractDensityWindowHeight" "")
+absSetBinOption( "Block" "AbstractDensityDefaultWindowWidth" "20")
+absSetBinOption( "Block" "AbstractDensityDefaultWindowHeight" "20")
+absSetBinOption( "Block" "AbstractPinFracture"        "false")
+absSetBinOption( "Block" "AbstractBlockageFracture"   "false")
+absSetBinOption( "Block" "AbstractAdjustStairStepCover" "partial")
+absSetBinOption( "Block" "AbstractAdjustStairStepWidth" "0.024")
+absSetBinOption( "Block" "AbstractSiteName"           "")
+absSetBinOption( "Block" "AbstractSiteNameDefine"     "")
+absSetBinOption( "Block" "AbstractSiteArrayPattern"   "false")
+absSetBinOption( "Block" "AbstractSiteArrayCells"     "")
+absSetBinOption( "Block" "AbstractSiteArrayCellsTable" "")
+absSetBinOption( "Block" "AbstractOverlapLayerAction" "off")
+absSetBinOption( "Block" "AbstractOverlapLayers"      "met1 met2 met3 met4 met5 via via2 via3 via4 poly diff nwell ")
+absSetBinOption( "Block" "AbstractOverlapLayerSize"   "0")
+absSetBinOption( "Block" "AbstractOverlapLayerSmoothFactor" "100")
+absSetBinOption( "Block" "AbstractGridMode"           "off")
+absSetBinOption( "Block" "AbstractUpdateTechFile"     "false")
+absSetBinOption( "Block" "AbstractMetal1Pitch"        "0.05")
+absSetBinOption( "Block" "AbstractMetal1Offset"       "0")
+absSetBinOption( "Block" "AbstractMetal2Pitch"        "0.05")
+absSetBinOption( "Block" "AbstractMetal2Offset"       "0")
+absSetBinOption( "Block" "AbstractMetal3Pitch"        "0.05")
+absSetBinOption( "Block" "AbstractMetal3Offset"       "0")
+absSetBinOption( "Block" "AbstractMetal1PitchPercent" "50")
+absSetBinOption( "Block" "AbstractMetal2PitchPercent" "50")
+absSetBinOption( "Block" "AbstractMetal3PitchPercent" "50")
+absSetBinOption( "Block" "AbstractPinAccessMode"      "narrowPin")
+absSetBinOption( "Block" "AbstractDiagonalVias"       "false")
+absSetBinOption( "Block" "AbstractGridDistanceMetric" "euclidean")
+absSetBinOption( "Block" "AbstractRetainLayout"       "false")
+absSetBinOption( "Block" "AbstractPinStretchOutPrb"   "false")
+absSetBinOption( "Block" "VerifyTerminals"            "true")
+absSetBinOption( "Block" "VerifyRowSpacing"           "0")
+absSetBinOption( "Block" "VerifyGrid"                 "true")
+absSetBinOption( "Block" "VerifyTarget"               "true")
+absSetBinOption( "Block" "VerifyTargetSelection"      "Silicon Ensemble")
+absSetBinOption( "Block" "TargetSystemCMD"            "sedsm -m=96 -gd=ansi")
+absSetBinOption( "Block" "VerifyEncounterPromptRegEx" "encounter$")
+absSetBinOption( "Block" "VerifyTargetRowDirection"   "horizontal")
+absSetBinOption( "Block" "VerifyTechFile"             "")
+absSetBinOption( "Block" "VerifyTargetMultiple"       "false")
+absSetBinOption( "Block" "VerifyTargetMultipleRows"   "false")
+absSetBinOption( "Block" "VerifyTargetPower"          "true")
+absSetBinOption( "Block" "VerifySrouteConfigFile"     "")
+absSetBinOption( "Block" "VerifyTargetRouter"         "Nanoroute")
+absSetBinOption( "Block" "VerifyTargetMaxRouteTime"   "1")
+absSetBinOption( "Block" "VerifyConfigFile"           "")
+absSetBinOption( "Block" "VerifyTargetGeom"           "")
+absSetBinOption( "Block" "VerifyTargetIgnore"         "EXCHANGEFORMATS-USER-525\nEXCHANGEFORMATS-USER-392\nEXCHANGEFORMATS-USER-34\nno clock net\nCannot determine standard cell height")
+
+absDeselectBin("Ignore" )
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; End Abstract Options File
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
diff --git a/calibre_setup/.cgipexdb b/calibre_setup/.cgipexdb
new file mode 120000
index 0000000..7351f05
--- /dev/null
+++ b/calibre_setup/.cgipexdb
@@ -0,0 +1 @@
+rcx.svrf
\ No newline at end of file
diff --git a/calibre_setup/drc.runset b/calibre_setup/drc.runset
index 05f6f1b..e72b6b5 100644
--- a/calibre_setup/drc.runset
+++ b/calibre_setup/drc.runset
@@ -17,6 +17,7 @@
 // https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 //
 // SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
 *drcRulesFile: ${PDK_HOME}/DRC/Calibre/s8_drcRules
 *drcRunDir: ${BAG_WORK_DIR}/calibre_run/drc/myLib/myCell
 *drcLayoutPaths: myCell.calibre.db
diff --git a/calibre_setup/lvs.svrf b/calibre_setup/lvs.svrf
index a10001c..2284e53 100644
--- a/calibre_setup/lvs.svrf
+++ b/calibre_setup/lvs.svrf
@@ -26,7 +26,7 @@
 SOURCE PRIMARY "{{ cell_name }}"
 SOURCE SYSTEM SPICE
 
-MASK SVDB DIRECTORY "svdb" QUERY CCI
+MASK SVDB DIRECTORY "svdb" QUERY XRC
 
 LVS REPORT "{{ cell_name }}.lvs.report"
 
@@ -64,4 +64,8 @@
 
 DRC ICSTATION YES
 
+PEX POWER LAYOUT VDD
+PEX GROUND LAYOUT VSS
+PEX REDUCE ANALOG NO
+
 INCLUDE "$PDK_HOME/LVS/Calibre/lvs_s8_opts"
diff --git a/calibre_setup/lvs_adc.runset b/calibre_setup/lvs_adc.runset
new file mode 100644
index 0000000..2dab88c
--- /dev/null
+++ b/calibre_setup/lvs_adc.runset
@@ -0,0 +1,59 @@
+// Copyright 2019-2021 SkyWater PDK Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// This code is *alternatively* available under a BSD-3-Clause license, see
+// details in the README.md at the top level and the license text at
+// https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+//
+// SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+*lvsRulesFile: ${PDK_HOME}/LVS/Calibre/lvs_s8_opts
+*lvsRunDir: $BAG_WORK_DIR/calibre_run/lvs/AAA_SAR_lay/AAA_Slice
+*lvsLayoutPaths: /tools/B/felicia_guo/bag3-sky130-2/calibre_run/lvs/AAA_SAR_lay/AAA_Slice/layout.gds
+*lvsLayoutPrimary: AAA_Slice
+*lvsLayoutLibrary: AAA_SAR_lay
+*lvsLayoutView: layout
+*lvsSourcePath: /tools/B/felicia_guo/bag3-sky130-2/gen_outputs/bag_sar/AAA_Slice.cdl
+*lvsSourcePrimary: AAA_Slice
+*lvsSourceLibrary: AAA_SAR_lay
+*lvsSourceView: schematic
+*lvsSpiceFile: AAA_Slice.sp
+*lvsPowerNames: VDD
+*lvsGroundNames: VSS
+*lvsRecognizeGates: NONE
+*lvsConfigureSplitGates: 1
+*lvsReduceSplitGates: 0
+*lvsERCDatabase: AAA_Slice.erc.results
+*lvsERCSummaryFile: AAA_Slice.erc.summary
+*lvsIncludeSVRFCmds: 1
+*lvsSVRFCmds: {LVS FILTER R(SH) SHORT SOURCE} {}
+*lvsReportFile: AAA_Slice.lvs.report
+*lvsViewReport: 0
+*lvsSVDBxcal: 1
+*lvsSVDBcci: 1
+*lvsSVDBtxref: 1
+*lvsSVDBnopinloc: 1
+*lvsMaskDBFile: AAA_Slice.maskdb
+*cmnWarnLayoutOverwrite: 0
+*cmnWarnSourceOverwrite: 0
+*cmnPromptSaveRunset: 0
+*cmnShowOptions: 1
+*cmnSaveRunsetChanges: 0
+*cmnVConnectColon: 1
+*cmnTemplate_RN: $BAG_WORK_DIR/calibre_run/lvs/%L/%l
+*cmnSlaveHosts: {use {}} {hostName {}} {cpuCount {}} {a32a64 {}} {rsh {}} {maxMem {}} {workingDir {}} {layerDir {}} {mgcLibPath {}} {launchName {}}
+*cmnLSFSlaveTbl: {use 1} {totalCpus 1} {minCpus 1} {architecture {{}}} {minMemory {{}}} {resourceOptions {{}}} {submitOptions {{}}}
+*cmnGridSlaveTbl: {use 1} {totalCpus 1} {minCpus 1} {architecture {{}}} {minMemory {{}}} {resourceOptions {{}}} {submitOptions {{}}}
+*cmnFDILayoutLibrary: AAA_SAR_lay
+*cmnFDILayoutView: layout
+*cmnFDIDEFLayoutPath: AAA_Slice.def
diff --git a/calibre_setup/rcx.svrf b/calibre_setup/rcx.svrf
new file mode 100644
index 0000000..54668e0
--- /dev/null
+++ b/calibre_setup/rcx.svrf
@@ -0,0 +1,128 @@
+// Copyright 2019-2021 SkyWater PDK Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// This code is *alternatively* available under a BSD-3-Clause license, see
+// details in the README.md at the top level and the license text at
+// https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+//
+// SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
+LAYOUT PATH  "{{ layout_file }}"
+LAYOUT PRIMARY "{{ cell_name }}"
+LAYOUT SYSTEM {{layout_type}}
+
+SOURCE PATH "{{ netlist_file }}"
+SOURCE PRIMARY "{{ cell_name }}"
+SOURCE SYSTEM SPICE
+
+LAYOUT CASE YES
+SOURCE CASE YES
+LVS COMPARE CASE YES
+
+MASK SVDB DIRECTORY "svdb" QUERY XRC
+
+LVS REPORT "{{ cell_name }}.rcx.report"
+
+LVS REPORT OPTION NONE
+LVS FILTER UNUSED OPTION NONE SOURCE
+LVS FILTER UNUSED OPTION NONE LAYOUT
+LVS FILTER R(SH) SHORT SOURCE
+LVS FILTER R(SH) SHORT LAYOUT
+LVS REPORT MAXIMUM 50
+LVS POWER NAME VDD
+LVS GROUND NAME VSS
+
+LVS RECOGNIZE GATES NONE
+
+LVS REDUCE SPLIT GATES NO
+LVS REDUCE PARALLEL MOS YES
+LVS SHORT EQUIVALENT NODES NO
+
+LVS ABORT ON SOFTCHK NO
+LVS ABORT ON SUPPLY ERROR YES
+LVS IGNORE PORTS NO
+LVS SHOW SEED PROMOTIONS NO
+LVS SHOW SEED PROMOTIONS MAXIMUM 50
+
+LVS ISOLATE SHORTS NO
+
+VIRTUAL CONNECT COLON YES
+VIRTUAL CONNECT REPORT NO
+
+LVS EXECUTE ERC YES
+ERC RESULTS DATABASE "{{ cell_name }}.erc.results"
+ERC SUMMARY REPORT "{{ cell_name }}.erc.summary" REPLACE HIER
+ERC CELL NAME YES CELL SPACE XFORM
+ERC MAXIMUM RESULTS 1000
+ERC MAXIMUM VERTEX 4096
+
+DRC ICSTATION YES
+
+// S8 specific features
+
+UNIT CAPACITANCE ff
+
+// Filter Devices in include file to give LVS & xRC consistency
+
+LVS FILTER R(cds_thru) SHORT SOURCE	       
+LVS FILTER R(cds_thru) SHORT LAYOUT	       
+
+LVS FILTER Dpar                    OPEN  SOURCE
+LVS FILTER Dpar                    OPEN  LAYOUT
+LVS FILTER Dpar(DNWDIODE_PW)                    OPEN  SOURCE
+LVS FILTER Dpar(DNWDIODE_PW)                    OPEN  LAYOUT
+
+LVS FILTER Probe                   OPEN  SOURCE
+LVS FILTER Probe                   OPEN  LAYOUT
+
+LVS Filter icecap 	open source
+
+LVS Filter s8fmlt_iref_termx  open source
+LVS Filter s8fmlt_neg_termx   open source
+LVS Filter s8fmlt_termx       open source
+LVS Filter s8fmlt_vdac_termx  open source
+
+//# diff/tap devices
+
+LVS FILTER diff_dev                OPEN  SOURCE
+LVS FILTER diff_dev                OPEN  LAYOUT
+LVS FILTER tap_dev                 OPEN  SOURCE
+LVS FILTER tap_dev                 OPEN  LAYOUT
+
+//# dummy device to prevent empty cells from becoming subckt primitives
+
+LVS FILTER cad_dummy_open_device   OPEN  SOURCE
+LVS FILTER cad_dummy_open_device   OPEN  LAYOUT
+
+// Custom netlist settings
+PEX REDUCE MINRES SHORT 0.000001
+PEX POWER LAYOUT VDD
+PEX GROUND LAYOUT VSS
+
+// Include to filter out shorts from current summer
+PEX NETLIST FILTER R(SH) SOURCE SHORT
+PEX NETLIST FILTER R(SH) LAYOUT SHORT
+
+PEX NETLIST FILTER R(cds_thru) SOURCE SHORT
+PEX NETLIST FILTER R(cds_thru) LAYOUT SHORT
+
+// DSPF
+// Configure to use DPSF to match other BAG extraction methods
+PEX NETLIST {{ cell_name }}.spf DSPF SOURCEBASED
+
+// Spectre
+//PEX NETLIST {{ cell_name }}.pex.netlist SPECTRE SOURCEBASED 
+
+INCLUDE "$PDK_HOME/PEX/xRC/cap_models"
+INCLUDE "$PDK_HOME/PEX/xRC/extLvsRules_s8_5lm"
diff --git a/corners_setup.yaml b/corners_setup.yaml
index 2399654..d6ab6eb 100644
--- a/corners_setup.yaml
+++ b/corners_setup.yaml
@@ -17,16 +17,30 @@
 # https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
-
 tt:
   - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_fet']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_cell']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_parRC']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_rc']
 ff:
   - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'ff_fet']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'ff_cell']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_parRC']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_rc']
 ss:
   - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'ss_fet']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'ss_cell']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_parRC']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_rc']
 sf:
   - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'sf_fet']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'sf_cell']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_parRC']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_rc']
 fs:
   - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'fs_fet']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'fs_cell']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_parRC']
+  - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'tt_rc']
 mc:
   - !!python/tuple ['${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK/MODELS/SPECTRE/s8phirs_10r/Models/design_wrapper.lib.scs', 'mc']
diff --git a/docs/images/loadtech.png b/docs/images/loadtech.png
new file mode 100644
index 0000000..b58980b
--- /dev/null
+++ b/docs/images/loadtech.png
Binary files differ
diff --git a/docs/images/savetech.png b/docs/images/savetech.png
new file mode 100644
index 0000000..302bebe
--- /dev/null
+++ b/docs/images/savetech.png
Binary files differ
diff --git a/docs/images/techman.png b/docs/images/techman.png
new file mode 100644
index 0000000..ca9e063
--- /dev/null
+++ b/docs/images/techman.png
Binary files differ
diff --git a/install.sh b/install.sh
index a8611e7..c504ba8 100755
--- a/install.sh
+++ b/install.sh
@@ -31,19 +31,14 @@
 ln_files=( "bag_config.yaml"
            ".cdsenv"
            ".cdsinit"
-	   ".simrc"
+	       ".simrc"
            ".bashrc"
            ".bashrc_bag"
            "cds.lib.core"
-           ".cshrc"
-           ".cshrc_bag"
            "display.drf"
            "models"
            ".gitignore"
-           "leBindKeys.il"
-           "pvtech.lib"
-           "tutorial_files"
-           "start_tutorial.sh" )
+           "leBindKeys.il" )
 
 # user configuration files; copy
 for f in "${cp_files[@]}"; do
@@ -75,6 +70,12 @@
 ln -s BAG_framework/run_scripts/start_bag_ICADV12d3.il start_bag.il
 ln -s BAG_framework/run_scripts/start_bag.sh .
 ln -s BAG_framework/run_scripts/run_bag.sh .
+ln -s BAG_framework/run_scripts/gen_cell.sh .
+ln -s BAG_framework/run_scripts/sim_cell.sh .
+ln -s BAG_framework/run_scripts/meas_cell.sh .
+ln -s BAG_framework/run_scripts/run_em_cell.sh .
+ln -s BAG_framework/run_scripts/extract_cell.sh .
+ln -s BAG_framework/run_scripts/dsn_cell.sh .
 ln -s BAG_framework/run_scripts/virt_server.sh .
 ln -s BAG_framework/run_scripts/setup_submodules.py .
 git add start_bag.il
@@ -83,11 +84,5 @@
 git add virt_server.sh
 git add setup_submodules.py
 
-# copy over transistor characterization examples
-# cp -r ${TECH_DIR}/specs_mos_char .
-# git add specs_mos_char
-# cp -r ${TECH_DIR}/scripts_char .
-# git add scripts_char
-# mkdir data
-# cp -r ${TECH_DIR}/mos_data/nch_w4 data/
-# cp -r ${TECH_DIR}/mos_data/pch_w4 data/
+ln -s ${BAG_TEMP_DIR}/simulations/gen_outputs gen_outputs_scratch
+ln -s ${BAG_TEMP_DIR}/calibre_run calibre_run
diff --git a/netlist_setup/bag_prim.cdl b/netlist_setup/bag_prim.cdl
index fd9793a..bce1250 100644
--- a/netlist_setup/bag_prim.cdl
+++ b/netlist_setup/bag_prim.cdl
@@ -72,3 +72,53 @@
 *.PININFO B:B D:B G:B S:B
 MM0 D G S B pshort l=l*1.0e6 w=w*1.0e6 m=nf mult=1
 .ENDS
+
+.SUBCKT res_metal_1 MINUS PLUS
+*.PININFO MINUS:B PLUS:B
+RR0 PLUS MINUS mrm1  m=1 w=w*1.0e6 l=l*1.0e6
+.ENDS
+
+.SUBCKT res_metal_2 MINUS PLUS
+*.PININFO MINUS:B PLUS:B
+RR0 PLUS MINUS mrm2  m=1 w=w*1.0e6 l=l*1.0e6
+.ENDS
+
+.SUBCKT res_metal_3 MINUS PLUS
+*.PININFO MINUS:B PLUS:B
+RR0 PLUS MINUS mrm3  m=1 w=w*1.0e6 l=l*1.0e6
+.ENDS
+
+.SUBCKT res_metal_4 MINUS PLUS
+*.PININFO MINUS:B PLUS:B
+RR0 PLUS MINUS mrm4  m=1 w=w*1.0e6 l=l*1.0e6
+.ENDS
+
+.SUBCKT res_metal_5 MINUS PLUS
+*.PININFO MINUS:B PLUS:B
+RR0 PLUS MINUS mrm5  m=1 w=w*1.0e6 l=l*1.0e6
+.ENDS
+
+.SUBCKT res_standard BULK MINUS PLUS
+*.PININFO BULK:B MINUS:B PLUS:B
+xR0 PLUS MINUS BULK xhrpoly m=1 w=w*1.0e6 l=l*1.0e6
+.ENDS
+
+.SUBCKT res_high_res BULK MINUS PLUS
+*.PININFO BULK:B MINUS:B PLUS:B
+xR0 PLUS MINUS BULK xuhrpoly m=1 w=w*1.0e6 l=l*1.0e6
+.ENDS
+
+.SUBCKT mim_standard BOT TOP
+*.PININFO BOT:B TOP:B
+CC0 TOP BOT xcmimc2 w=unit_width*1.0e6 l=unit_height*1.0e6 m=num_rows*num_cols
+.ENDS
+
+.SUBCKT mim_45 BOT TOP
+*.PININFO BOT:B TOP:B
+CC0 TOP BOT xcmimc2 w=unit_width*1.0e6 l=unit_height*1.0e6 m=num_rows*num_cols
+.ENDS
+
+.SUBCKT mim_34 BOT TOP
+*.PININFO BOT:B TOP:B
+CC0 TOP BOT xcmimc1 w=unit_width*1.0e6 l=unit_height*1.0e6 m=num_rows*num_cols
+.ENDS
diff --git a/netlist_setup/bag_prim.scs b/netlist_setup/bag_prim.scs
index 3ea4972..578077c 100644
--- a/netlist_setup/bag_prim.scs
+++ b/netlist_setup/bag_prim.scs
@@ -73,6 +73,56 @@
 MM0 D G S B pshort l=l * 1.0e6 w=w * 1.0e6 m=nf mult=1
 ends pmos4_standard
 
+subckt res_metal_1 MINUS PLUS
+parameters l w
+RR0 PLUS MINUS mrm1  w=w * 1.0e6 l=l * 1.0e6 m=1
+ends res_metal_1
+
+subckt res_metal_2 MINUS PLUS
+parameters l w
+RR0 PLUS MINUS mrm2  w=w * 1.0e6 l=l * 1.0e6 m=1
+ends res_metal_2
+
+subckt res_metal_3 MINUS PLUS
+parameters l w
+RR0 PLUS MINUS mrm3  w=w * 1.0e6 l=l * 1.0e6 m=1
+ends res_metal_3
+
+subckt res_metal_4 MINUS PLUS
+parameters l w
+RR0 PLUS MINUS mrm4  w=w * 1.0e6 l=l * 1.0e6 m=1
+ends res_metal_4
+
+subckt res_metal_5 MINUS PLUS
+parameters l w
+RR0 PLUS MINUS mrm5  w=w * 1.0e6 l=l * 1.0e6 m=1
+ends res_metal_5
+
+subckt res_standard BULK MINUS PLUS
+parameters l w
+RR0 PLUS MINUS BULK xhrpoly w=w * 1.0e6 l=l * 1.0e6 m=1 mult=1
+ends res_standard
+
+subckt res_high_res BULK MINUS PLUS
+parameters l w
+RR0 PLUS MINUS BULK xuhrpoly w=w * 1.0e6 l=l * 1.0e6 m=1 mult=1
+ends res_high_res
+
+subckt mim_standard BOT TOP
+parameters unit_width unit_height num_rows num_cols
+CC0 TOP BOT xcmimc2 w=unit_width * 1.0e6 l=unit_height * 1.0e6 m=num_rows * num_cols
+ends mim_standard
+
+subckt mim_45 BOT TOP
+parameters unit_width unit_height num_rows num_cols
+CC0 TOP BOT xcmimc2 w=unit_width * 1.0e6 l=unit_height * 1.0e6 m=num_rows * num_cols
+ends mim_45
+
+subckt mim_34 BOT TOP
+parameters unit_width unit_height num_rows num_cols
+CC0 TOP BOT xcmimc1 w=unit_width * 1.0e6 l=unit_height * 1.0e6 m=num_rows * num_cols
+ends mim_34
+
 subckt ideal_balun d c p n
     K0 d 0 p c transformer n1=2
     K1 d 0 c n transformer n1=2
diff --git a/netlist_setup/gen_config.yaml b/netlist_setup/gen_config.yaml
index d778d65..63f5931 100644
--- a/netlist_setup/gen_config.yaml
+++ b/netlist_setup/gen_config.yaml
@@ -17,7 +17,6 @@
 # https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
-
 header:
   CDL:
     includes: ["${BAG_TECH_CONFIG_DIR}/calibre_setup/source.added"]
@@ -64,8 +63,53 @@
   port_order: {}
 
 res_metal:
-  CDL: []
-  SPECTRE: []
+  CDL:
+    - [m, 1]
+    - [w, w*1.0e6]
+    - [l, l*1.0e6]
+  SPECTRE:
+    - [w, w * 1.0e6]
+    - [l, l * 1.0e6]
+    - [m, 1]
   VERILOG: []
   SYSVERILOG: []
-  types: []
+  types:
+    - [res_metal_1, mrm1]
+    - [res_metal_2, mrm2]
+    - [res_metal_3, mrm3]
+    - [res_metal_4, mrm4]
+    - [res_metal_5, mrm5]
+
+res:
+  CDL:
+    - [m, 1]
+    - [w, w*1.0e6]
+    - [l, l*1.0e6]
+  SPECTRE:
+    - [w, w * 1.0e6]
+    - [l, l * 1.0e6]
+    - [m, 1]
+    - [mult, 1]
+  VERILOG: []
+  SYSVERILOG: []
+  types:
+    - [res_standard, xhrpoly]
+    - [res_high_res, xuhrpoly]
+  prefix:
+    CDL: 'x'
+
+mim:
+  CDL:
+    - [w, unit_width*1.0e6]
+    - [l, unit_height*1.0e6]
+    - [m, num_rows*num_cols]
+  SPECTRE:
+    - [w, unit_width * 1.0e6]
+    - [l, unit_height * 1.0e6]
+    - [m, num_rows * num_cols]
+  VERILOG: []
+  SYSVERILOG: []
+  types:
+    - [mim_standard, xcmimc2]
+    - [mim_45, xcmimc2]
+    - [mim_34, xcmimc1]
diff --git a/netlist_setup/netlist_setup.yaml b/netlist_setup/netlist_setup.yaml
index b9a24a6..ebceabf 100644
--- a/netlist_setup/netlist_setup.yaml
+++ b/netlist_setup/netlist_setup.yaml
@@ -17,7 +17,6 @@
 # https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
-
 inc_list:
   4: ['${BAG_TECH_CONFIG_DIR}/calibre_setup/source.added']
   5: []
@@ -25,6 +24,45 @@
   7: []
 netlist_map:
   BAG_prim:
+    mim_34:
+      cell_name: mim_34
+      in_terms: []
+      io_terms: [BOT, TOP]
+      is_prim: true
+      lib_name: BAG_prim
+      nets: []
+      out_terms: []
+      props:
+        num_cols: [3, '']
+        num_rows: [3, '']
+        unit_height: [3, '']
+        unit_width: [3, '']
+    mim_45:
+      cell_name: mim_45
+      in_terms: []
+      io_terms: [BOT, TOP]
+      is_prim: true
+      lib_name: BAG_prim
+      nets: []
+      out_terms: []
+      props:
+        num_cols: [3, '']
+        num_rows: [3, '']
+        unit_height: [3, '']
+        unit_width: [3, '']
+    mim_standard:
+      cell_name: mim_standard
+      in_terms: []
+      io_terms: [BOT, TOP]
+      is_prim: true
+      lib_name: BAG_prim
+      nets: []
+      out_terms: []
+      props:
+        num_cols: [3, '']
+        num_rows: [3, '']
+        unit_height: [3, '']
+        unit_width: [3, '']
     nmos4_hv:
       cell_name: nmos4_hv
       in_terms: []
@@ -157,6 +195,98 @@
         l: [3, '']
         nf: [3, '']
         w: [3, '']
+    res_high_res:
+      cell_name: res_high_res
+      in_terms: []
+      io_terms: [BULK, MINUS, PLUS]
+      is_prim: true
+      lib_name: BAG_prim
+      nets: []
+      out_terms: []
+      props:
+        l: [3, '']
+        w: [3, '']
+    res_metal_1:
+      cell_name: res_metal_1
+      in_terms: []
+      io_terms: [MINUS, PLUS]
+      is_prim: true
+      lib_name: BAG_prim
+      nets: []
+      out_terms: []
+      props:
+        l: [3, '']
+        w: [3, '']
+    res_metal_2:
+      cell_name: res_metal_2
+      in_terms: []
+      io_terms: [MINUS, PLUS]
+      is_prim: true
+      lib_name: BAG_prim
+      nets: []
+      out_terms: []
+      props:
+        l: [3, '']
+        w: [3, '']
+    res_metal_3:
+      cell_name: res_metal_3
+      in_terms: []
+      io_terms: [MINUS, PLUS]
+      is_prim: true
+      lib_name: BAG_prim
+      nets: []
+      out_terms: []
+      props:
+        l: [3, '']
+        w: [3, '']
+    res_metal_4:
+      cell_name: res_metal_4
+      in_terms: []
+      io_terms: [MINUS, PLUS]
+      is_prim: true
+      lib_name: BAG_prim
+      nets: []
+      out_terms: []
+      props:
+        l: [3, '']
+        w: [3, '']
+    res_metal_5:
+      cell_name: res_metal_5
+      in_terms: []
+      io_terms: [MINUS, PLUS]
+      is_prim: true
+      lib_name: BAG_prim
+      nets: []
+      out_terms: []
+      props:
+        l: [3, '']
+        w: [3, '']
+    res_standard:
+      cell_name: res_standard
+      in_terms: []
+      io_terms: [BULK, MINUS, PLUS]
+      is_prim: true
+      lib_name: BAG_prim
+      nets: []
+      out_terms: []
+      props:
+        l: [3, '']
+        w: [3, '']
+  ahdlLib:
+    comparator:
+      cell_name: comparator
+      in_terms: [sigin, sigref]
+      io_terms: []
+      is_prim: true
+      lib_name: ahdlLib
+      nets: []
+      out_terms: [sigout]
+      props:
+        comp_slope: [3, '']
+        sigin_offset: [3, '']
+        sigout_high: [3, '']
+        sigout_low: [3, '']
+      va: ${CDSHOME}/tools/dfII/samples/artist/ahdlLib/comparator/veriloga/veriloga.va
   analogLib:
     cap:
       cell_name: cap
@@ -206,7 +336,7 @@
       nets: []
       out_terms: []
       props:
-        c: [3, '']
+        c: [3, 1u]
     dcfeed:
       cell_name: dcfeed
       in_terms: []
@@ -216,7 +346,7 @@
       nets: []
       out_terms: []
       props:
-        l: [3, '']
+        l: [3, 1u]
     gnd:
       cell_name: gnd
       ignore: true
@@ -289,6 +419,17 @@
         pw: [3, '']
         srcType: [3, pulse]
         td: [3, '']
+    ipwlf:
+      cell_name: ipwlf
+      in_terms: []
+      io_terms: [PLUS, MINUS]
+      is_prim: true
+      lib_name: analogLib
+      nets: []
+      out_terms: []
+      props:
+        fileName: [3, '']
+        srcType: [3, pwl]
     isin:
       cell_name: isin
       in_terms: []
@@ -302,6 +443,103 @@
         ia: [3, '']
         idc: [3, '']
         srcType: [3, sine]
+    mind:
+      cell_name: mind
+      in_terms: []
+      io_terms: []
+      is_prim: true
+      lib_name: analogLib
+      nets: []
+      out_terms: []
+      props:
+        ind1: [3, '']
+        ind2: [3, '']
+        k: [3, '0']
+    n12port:
+      cell_name: n12port
+      in_terms: []
+      io_terms: [t1, b1, t2, b2, t3, b3, t4, b4, t5, b5, t6, b6, t7, b7, t8, b8, t9,
+        b9, t10, b10, t11, b11, t12, b12]
+      is_prim: true
+      lib_name: analogLib
+      nets: []
+      out_terms: []
+      props:
+        dataFile: [3, '']
+        interp: [3, linear]
+        thermalnoise: [3, yes]
+    n1port:
+      cell_name: n1port
+      in_terms: []
+      io_terms: [t1, b1]
+      is_prim: true
+      lib_name: analogLib
+      nets: []
+      out_terms: []
+      props:
+        dataFile: [3, '']
+        interp: [3, linear]
+        thermalnoise: [3, yes]
+    n2port:
+      cell_name: n2port
+      in_terms: []
+      io_terms: [t1, b1, t2, b2]
+      is_prim: true
+      lib_name: analogLib
+      nets: []
+      out_terms: []
+      props:
+        dataFile: [3, '']
+        interp: [3, linear]
+        thermalnoise: [3, yes]
+    n3port:
+      cell_name: n3port
+      in_terms: []
+      io_terms: [t1, b1, t2, b2, t3, b3]
+      is_prim: true
+      lib_name: analogLib
+      nets: []
+      out_terms: []
+      props:
+        dataFile: [3, '']
+        interp: [3, linear]
+        thermalnoise: [3, yes]
+    n4port:
+      cell_name: n4port
+      in_terms: []
+      io_terms: [t1, b1, t2, b2, t3, b3, t4, b4]
+      is_prim: true
+      lib_name: analogLib
+      nets: []
+      out_terms: []
+      props:
+        dataFile: [3, '']
+        interp: [3, linear]
+        thermalnoise: [3, yes]
+    n6port:
+      cell_name: n6port
+      in_terms: []
+      io_terms: [t1, b1, t2, b2, t3, b3, t4, b4, t5, b5, t6, b6]
+      is_prim: true
+      lib_name: analogLib
+      nets: []
+      out_terms: []
+      props:
+        dataFile: [3, '']
+        interp: [3, linear]
+        thermalnoise: [3, yes]
+    n8port:
+      cell_name: n8port
+      in_terms: []
+      io_terms: [t1, b1, t2, b2, t3, b3, t4, b4, t5, b5, t6, b6, t7, b7, t8, b8]
+      is_prim: true
+      lib_name: analogLib
+      nets: []
+      out_terms: []
+      props:
+        dataFile: [3, '']
+        interp: [3, linear]
+        thermalnoise: [3, yes]
     port:
       cell_name: port
       in_terms: []
diff --git a/netlist_setup/spectre_prim.scs b/netlist_setup/spectre_prim.scs
index 8bcb34c..6f47b51 100644
--- a/netlist_setup/spectre_prim.scs
+++ b/netlist_setup/spectre_prim.scs
@@ -17,6 +17,7 @@
 // https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 //
 // SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
 simulator lang=spectre
 
 subckt ideal_balun d c p n
diff --git a/pcell_setup/gen_skill.py b/pcell_setup/gen_skill.py
index 03b40c9..27da1fa 100644
--- a/pcell_setup/gen_skill.py
+++ b/pcell_setup/gen_skill.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,35 +24,41 @@
 
 from jinja2 import Template
 
-
 tech_lib = 's8phirs_10r'
-# mos_w_default = '0.42'
-# mos_l_default = '0.15'
-res_w_default = '1u'
-res_l_default = '2u'
-res_metal_w_default = '400n'
-res_metal_l_default = '1u'
+# mos_w_default = '420n'
+# mos_l_default = '150n'
+# res_w_default = '1u'
+# res_l_default = '2u'
+res_metal_w_default = '720n'
+res_metal_l_default = '290n'
 dio_w_default = '1u'
 dio_l_default = '1u'
 
 mos_list = [
-    ('nmos4', 'standard', 'nfet', 'nshort', '0.42', '0.15'),
-    ('nmos4', 'svt', 'nfet', 'nshort', '0.42', '0.15'),
-    ('nmos4', 'hv', 'nfet', 'nhv', '0.75', '0.50'),
-    ('nmos4', 'hvesd', 'nfet', 'nhvesd', '17.50', '0.55'),
-    ('nmos4', 'lvt', 'nfet', 'nlowvt', '0.42', '0.15'),
-    ('pmos4', 'standard', 'pfet', 'pshort', '0.55', '0.15'),
-    ('pmos4', 'svt', 'pfet', 'pshort', '0.55', '0.15'),
-    ('pmos4', 'hvt', 'pfet', 'phighvt', '0.54', '0.15'),
-    ('pmos4', 'hv', 'pfet', 'phv', '0.42', '0.50'),
-    ('pmos4', 'hvesd', 'pfet', 'phvesd', '14.50', '0.55'),
-    ('pmos4', 'lvt', 'pfet', 'plowvt', '0.55', '0.35'),
+    ('nmos4', 'standard', 'nfet', 'nshort', '420n', '150n'),
+    ('nmos4', 'svt', 'nfet', 'nshort', '420n', '150n'),
+    ('nmos4', 'hv', 'nfet', 'nhv', '750n', '500n'),
+    ('nmos4', 'hvesd', 'nfet', 'nhvesd', '17500n', '550n'),
+    ('nmos4', 'lvt', 'nfet', 'nlowvt', '420n', '150n'),
+    ('pmos4', 'standard', 'pfet', 'pshort', '550n', '150n'),
+    ('pmos4', 'svt', 'pfet', 'pshort', '550n', '150n'),
+    ('pmos4', 'hvt', 'pfet', 'phighvt', '540n', '150n'),
+    ('pmos4', 'hv', 'pfet', 'phv', '420n', '500n'),
+    ('pmos4', 'hvesd', 'pfet', 'phvesd', '14500n', '550n'),
+    ('pmos4', 'lvt', 'pfet', 'plowvt', '550n', '350n'),
 ]
 
 res_list = [
+    ('standard', 'hrpoly', '1000n', '2105n'),
+    ('high_res', 'uhrpoly', '350n', '17400n'),
 ]
 
 res_metal_list = [
+    '1',
+    '2',
+    '3',
+    '4',
+    '5',
 ]
 
 dio_list = [
@@ -72,8 +78,8 @@
         # mos_w_default=mos_w_default,
         # mos_l_default=mos_l_default,
         res_list=res_list,
-        res_w_default=res_w_default,
-        res_l_default=res_l_default,
+        # res_w_default=res_w_default,
+        # res_l_default=res_l_default,
         res_metal_list=res_metal_list,
         res_metal_w_default=res_metal_w_default,
         res_metal_l_default=res_metal_l_default,
diff --git a/pcell_setup/mim_pcell.il b/pcell_setup/mim_pcell.il
new file mode 100644
index 0000000..69219a2
--- /dev/null
+++ b/pcell_setup/mim_pcell.il
@@ -0,0 +1,126 @@
+;; Copyright 2019-2021 SkyWater PDK Authors
+;;
+;; Licensed under the Apache License, Version 2.0 (the "License");
+;; you may not use this file except in compliance with the License.
+;; You may obtain a copy of the License at
+;;
+;;     https://www.apache.org/licenses/LICENSE-2.0
+;;
+;; Unless required by applicable law or agreed to in writing, software
+;; distributed under the License is distributed on an "AS IS" BASIS,
+;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+;; See the License for the specific language governing permissions and
+;; limitations under the License.
+;;
+;; This code is *alternatively* available under a BSD-3-Clause license, see
+;; details in the README.md at the top level and the license text at
+;; https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+;;
+;; SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
+;; This skill file compiles schematic PCells for BAG primitives for MIM
+
+lib_obj = ddGetObj("BAG_prim")
+
+
+; mim_standard/xcmimc2
+pcDefinePCell(
+    list( lib_obj "mim_standard" "schematic" "schematic")
+    ((unit_width string "1u")
+     (unit_height string "1u")
+     (num_rows string "1")
+     (num_cols string "1")
+    )
+    let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(unit_width) * 1e6
+        lval = cdfParseFloatString(unit_height) * 1e6
+        rval = atoi(num_rows)
+        cval = atoi(num_cols)
+        inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "cmimc" "symbol"
+                                              "C0" 0:0 "R0" 1
+                                              list(list("ctype" "string" "xcmimc2")
+                                                   list("cw" "string" sprintf(nil "%0.2f" wval))
+                                                   list("cl" "string" sprintf(nil "%0.2f" lval))
+                                                   list("nrow" "string" num_rows)
+                                                   list("ncol" "string" num_cols)
+                                                   list("cm" "string" sprintf(nil "%d" rval * cval)))
+                                            )
+        iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
+        io_net = dbCreateNet(pcCellView "TOP")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "TOP" 0:0.5 "R0")
+                             "TOP" dbCreateTerm(io_net "TOP" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "c0"))
+        io_net = dbCreateNet(pcCellView "BOT")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "BOT" 0:-0.75 "R0")
+                             "BOT" dbCreateTerm(io_net "BOT" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "c1"))
+    )
+)
+
+; mim_45/xcmimc2
+pcDefinePCell(
+    list( lib_obj "mim_45" "schematic" "schematic")
+    ((unit_width string "1u")
+     (unit_height string "1u")
+     (num_rows string "1")
+     (num_cols string "1")
+    )
+    let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(unit_width) * 1e6
+        lval = cdfParseFloatString(unit_height) * 1e6
+        rval = atoi(num_rows)
+        cval = atoi(num_cols)
+        inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "cmimc" "symbol"
+                                              "C0" 0:0 "R0" 1
+                                              list(list("ctype" "string" "xcmimc2")
+                                                   list("cw" "string" sprintf(nil "%0.2f" wval))
+                                                   list("cl" "string" sprintf(nil "%0.2f" lval))
+                                                   list("nrow" "string" num_rows)
+                                                   list("ncol" "string" num_cols)
+                                                   list("cm" "string" sprintf(nil "%d" rval * cval)))
+                                            )
+        iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
+        io_net = dbCreateNet(pcCellView "TOP")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "TOP" 0:0.5 "R0")
+                             "TOP" dbCreateTerm(io_net "TOP" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "c0"))
+        io_net = dbCreateNet(pcCellView "BOT")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "BOT" 0:-0.75 "R0")
+                             "BOT" dbCreateTerm(io_net "BOT" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "c1"))
+    )
+)
+
+; mim_34/xcmimc1
+pcDefinePCell(
+    list( lib_obj "mim_34" "schematic" "schematic")
+    ((unit_width string "1u")
+     (unit_height string "1u")
+     (num_rows string "1")
+     (num_cols string "1")
+    )
+    let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(unit_width) * 1e6
+        lval = cdfParseFloatString(unit_height) * 1e6
+        rval = atoi(num_rows)
+        cval = atoi(num_cols)
+        inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "cmimc" "symbol"
+                                              "C0" 0:0 "R0" 1
+                                              list(list("ctype" "string" "xcmimc1")
+                                                   list("cw" "string" sprintf(nil "%0.2f" wval))
+                                                   list("cl" "string" sprintf(nil "%0.2f" lval))
+                                                   list("nrow" "string" num_rows)
+                                                   list("ncol" "string" num_cols)
+                                                   list("cm" "string" sprintf(nil "%d" rval * cval)))
+                                            )
+        iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
+        io_net = dbCreateNet(pcCellView "TOP")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "TOP" 0:0.5 "R0")
+                             "TOP" dbCreateTerm(io_net "TOP" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "c0"))
+        io_net = dbCreateNet(pcCellView "BOT")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "BOT" 0:-0.75 "R0")
+                             "BOT" dbCreateTerm(io_net "BOT" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "c1"))
+    )
+)
diff --git a/pcell_setup/prim_pcell.il b/pcell_setup/prim_pcell.il
index 0afa585..7e864e3 100644
--- a/pcell_setup/prim_pcell.il
+++ b/pcell_setup/prim_pcell.il
@@ -26,20 +26,24 @@
 ; nmos4_standard/nshort
 pcDefinePCell(
     list( lib_obj "nmos4_standard" "schematic" "schematic")
-    ((w string "0.42")
-     (l string "0.15")
+    ((w string "420n")
+     (l string "150n")
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "nfet" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "nshort")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "nshort")
+                                                   list("hspiceModelMenu" "string" "nshort")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("nshort_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("nshort_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -64,20 +68,24 @@
 ; nmos4_svt/nshort
 pcDefinePCell(
     list( lib_obj "nmos4_svt" "schematic" "schematic")
-    ((w string "0.42")
-     (l string "0.15")
+    ((w string "420n")
+     (l string "150n")
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "nfet" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "nshort")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "nshort")
+                                                   list("hspiceModelMenu" "string" "nshort")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("nshort_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("nshort_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -102,20 +110,24 @@
 ; nmos4_hv/nhv
 pcDefinePCell(
     list( lib_obj "nmos4_hv" "schematic" "schematic")
-    ((w string "0.75")
-     (l string "0.50")
+    ((w string "750n")
+     (l string "500n")
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "nfet" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "nhv")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "nhv")
+                                                   list("hspiceModelMenu" "string" "nhv")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("nhv_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("nhv_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -140,20 +152,24 @@
 ; nmos4_hvesd/nhvesd
 pcDefinePCell(
     list( lib_obj "nmos4_hvesd" "schematic" "schematic")
-    ((w string "17.50")
-     (l string "0.55")
+    ((w string "17500n")
+     (l string "550n")
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "nfet" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "nhvesd")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "nhvesd")
+                                                   list("hspiceModelMenu" "string" "nhvesd")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("nhvesd_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("nhvesd_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -178,20 +194,24 @@
 ; nmos4_lvt/nlowvt
 pcDefinePCell(
     list( lib_obj "nmos4_lvt" "schematic" "schematic")
-    ((w string "0.42")
-     (l string "0.15")
+    ((w string "420n")
+     (l string "150n")
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "nfet" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "nlowvt")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "nlowvt")
+                                                   list("hspiceModelMenu" "string" "nlowvt")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("nlowvt_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("nlowvt_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -216,20 +236,24 @@
 ; pmos4_standard/pshort
 pcDefinePCell(
     list( lib_obj "pmos4_standard" "schematic" "schematic")
-    ((w string "0.55")
-     (l string "0.15")
+    ((w string "550n")
+     (l string "150n")
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "pfet" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "pshort")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "pshort")
+                                                   list("hspiceModelMenu" "string" "pshort")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("pshort_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("pshort_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -254,20 +278,24 @@
 ; pmos4_svt/pshort
 pcDefinePCell(
     list( lib_obj "pmos4_svt" "schematic" "schematic")
-    ((w string "0.55")
-     (l string "0.15")
+    ((w string "550n")
+     (l string "150n")
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "pfet" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "pshort")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "pshort")
+                                                   list("hspiceModelMenu" "string" "pshort")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("pshort_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("pshort_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -292,20 +320,24 @@
 ; pmos4_hvt/phighvt
 pcDefinePCell(
     list( lib_obj "pmos4_hvt" "schematic" "schematic")
-    ((w string "0.54")
-     (l string "0.15")
+    ((w string "540n")
+     (l string "150n")
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "pfet" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "phighvt")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "phighvt")
+                                                   list("hspiceModelMenu" "string" "phighvt")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("phighvt_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("phighvt_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -330,20 +362,24 @@
 ; pmos4_hv/phv
 pcDefinePCell(
     list( lib_obj "pmos4_hv" "schematic" "schematic")
-    ((w string "0.42")
-     (l string "0.50")
+    ((w string "420n")
+     (l string "500n")
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "pfet" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "phv")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "phv")
+                                                   list("hspiceModelMenu" "string" "phv")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("phv_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("phv_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -368,20 +404,24 @@
 ; pmos4_hvesd/phvesd
 pcDefinePCell(
     list( lib_obj "pmos4_hvesd" "schematic" "schematic")
-    ((w string "14.50")
-     (l string "0.55")
+    ((w string "14500n")
+     (l string "550n")
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "pfet" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "phvesd")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "phvesd")
+                                                   list("hspiceModelMenu" "string" "phvesd")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("phvesd_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("phvesd_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -406,20 +446,24 @@
 ; pmos4_lvt/plowvt
 pcDefinePCell(
     list( lib_obj "pmos4_lvt" "schematic" "schematic")
-    ((w string "0.55")
-     (l string "0.35")
+    ((w string "550n")
+     (l string "350n")
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "pfet" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "plowvt")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "plowvt")
+                                                   list("hspiceModelMenu" "string" "plowvt")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("plowvt_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("plowvt_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -443,6 +487,239 @@
 
 
 
+; res_standard/hrpoly
+pcDefinePCell(
+    list( lib_obj "res_standard" "schematic" "schematic")
+    ((w string "1000n")
+     (l string "2105n")
+    )
+    let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
+        wstr = sprintf(nil "%0.3f" wval)
+        lstr = sprintf(nil "%0.3f" lval)
+        inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "hrpoly" "symbol"
+                                              "R0" 0.5:0 "R270" 1
+                                              list(list("segW" "string" wstr)
+                                                   list("w" "string" wstr)
+                                                   list("segL" "string" lstr)
+                                                   list("l" "string" lstr)
+                                                   list("rCalcMethod" "string" "Segment Length")
+                                                  )
+                                            )
+        iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
+        io_net = dbCreateNet(pcCellView "PLUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "PLUS" 1:0 "R0")
+                             "PLUS" dbCreateTerm(io_net "PLUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "PLUS"))
+        io_net = dbCreateNet(pcCellView "MINUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "MINUS" -0.15:0 "R0")
+                             "MINUS" dbCreateTerm(io_net "MINUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "MINUS"))
+        io_net = dbCreateNet(pcCellView "BULK")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "BULK" -0.15:-0.4 "R0")
+                             "BULK" dbCreateTerm(io_net "BULK" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "B"))
+    )
+)
+
+; res_high_res/uhrpoly
+pcDefinePCell(
+    list( lib_obj "res_high_res" "schematic" "schematic")
+    ((w string "350n")
+     (l string "17400n")
+    )
+    let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
+        wstr = sprintf(nil "%0.3f" wval)
+        lstr = sprintf(nil "%0.3f" lval)
+        inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "uhrpoly" "symbol"
+                                              "R0" 0.5:0 "R270" 1
+                                              list(list("segW" "string" wstr)
+                                                   list("w" "string" wstr)
+                                                   list("segL" "string" lstr)
+                                                   list("l" "string" lstr)
+                                                   list("rCalcMethod" "string" "Segment Length")
+                                                  )
+                                            )
+        iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
+        io_net = dbCreateNet(pcCellView "PLUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "PLUS" 1:0 "R0")
+                             "PLUS" dbCreateTerm(io_net "PLUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "PLUS"))
+        io_net = dbCreateNet(pcCellView "MINUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "MINUS" -0.15:0 "R0")
+                             "MINUS" dbCreateTerm(io_net "MINUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "MINUS"))
+        io_net = dbCreateNet(pcCellView "BULK")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "BULK" -0.15:-0.4 "R0")
+                             "BULK" dbCreateTerm(io_net "BULK" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "B"))
+    )
+)
+
+
+
+; res_metal_1/mrm1
+pcDefinePCell(
+    list( lib_obj "res_metal_1" "schematic" "schematic")
+    ((w string "720n")
+     (l string "290n")
+    )
+    let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
+        wstr = sprintf(nil "%0.3f" wval)
+        lstr = sprintf(nil "%0.3f" lval)
+        inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "res" "symbol"
+                                              "R0" 0.1:0 "R90" 1
+                                              list(list("resistorTypr" "string" "met1")
+                                                   list("rw" "string" wstr)
+                                                   list("rl" "string" lstr)
+                                                   list("model" "string" "mrm1")
+                                                  )
+                                            )
+
+        iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
+        io_net = dbCreateNet(pcCellView "PLUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "PLUS" -0.15:0 "R0")
+                             "PLUS" dbCreateTerm(io_net "PLUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r0"))
+        io_net = dbCreateNet(pcCellView "MINUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "MINUS" 1.15:0 "R0")
+                             "MINUS" dbCreateTerm(io_net "MINUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r1"))
+    )
+)
+
+; res_metal_2/mrm2
+pcDefinePCell(
+    list( lib_obj "res_metal_2" "schematic" "schematic")
+    ((w string "720n")
+     (l string "290n")
+    )
+    let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
+        wstr = sprintf(nil "%0.3f" wval)
+        lstr = sprintf(nil "%0.3f" lval)
+        inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "res" "symbol"
+                                              "R0" 0.1:0 "R90" 1
+                                              list(list("resistorTypr" "string" "met2")
+                                                   list("rw" "string" wstr)
+                                                   list("rl" "string" lstr)
+                                                   list("model" "string" "mrm2")
+                                                  )
+                                            )
+
+        iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
+        io_net = dbCreateNet(pcCellView "PLUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "PLUS" -0.15:0 "R0")
+                             "PLUS" dbCreateTerm(io_net "PLUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r0"))
+        io_net = dbCreateNet(pcCellView "MINUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "MINUS" 1.15:0 "R0")
+                             "MINUS" dbCreateTerm(io_net "MINUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r1"))
+    )
+)
+
+; res_metal_3/mrm3
+pcDefinePCell(
+    list( lib_obj "res_metal_3" "schematic" "schematic")
+    ((w string "720n")
+     (l string "290n")
+    )
+    let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
+        wstr = sprintf(nil "%0.3f" wval)
+        lstr = sprintf(nil "%0.3f" lval)
+        inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "res" "symbol"
+                                              "R0" 0.1:0 "R90" 1
+                                              list(list("resistorTypr" "string" "met3")
+                                                   list("rw" "string" wstr)
+                                                   list("rl" "string" lstr)
+                                                   list("model" "string" "mrm3")
+                                                  )
+                                            )
+
+        iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
+        io_net = dbCreateNet(pcCellView "PLUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "PLUS" -0.15:0 "R0")
+                             "PLUS" dbCreateTerm(io_net "PLUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r0"))
+        io_net = dbCreateNet(pcCellView "MINUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "MINUS" 1.15:0 "R0")
+                             "MINUS" dbCreateTerm(io_net "MINUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r1"))
+    )
+)
+
+; res_metal_4/mrm4
+pcDefinePCell(
+    list( lib_obj "res_metal_4" "schematic" "schematic")
+    ((w string "720n")
+     (l string "290n")
+    )
+    let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
+        wstr = sprintf(nil "%0.3f" wval)
+        lstr = sprintf(nil "%0.3f" lval)
+        inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "res" "symbol"
+                                              "R0" 0.1:0 "R90" 1
+                                              list(list("resistorTypr" "string" "met4")
+                                                   list("rw" "string" wstr)
+                                                   list("rl" "string" lstr)
+                                                   list("model" "string" "mrm4")
+                                                  )
+                                            )
+
+        iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
+        io_net = dbCreateNet(pcCellView "PLUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "PLUS" -0.15:0 "R0")
+                             "PLUS" dbCreateTerm(io_net "PLUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r0"))
+        io_net = dbCreateNet(pcCellView "MINUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "MINUS" 1.15:0 "R0")
+                             "MINUS" dbCreateTerm(io_net "MINUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r1"))
+    )
+)
+
+; res_metal_5/mrm5
+pcDefinePCell(
+    list( lib_obj "res_metal_5" "schematic" "schematic")
+    ((w string "720n")
+     (l string "290n")
+    )
+    let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
+        wstr = sprintf(nil "%0.3f" wval)
+        lstr = sprintf(nil "%0.3f" lval)
+        inst = dbCreateParamInstByMasterName( pcCellView "s8phirs_10r" "res" "symbol"
+                                              "R0" 0.1:0 "R90" 1
+                                              list(list("resistorTypr" "string" "met5")
+                                                   list("rw" "string" wstr)
+                                                   list("rl" "string" lstr)
+                                                   list("model" "string" "mrm5")
+                                                  )
+                                            )
+
+        iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
+        io_net = dbCreateNet(pcCellView "PLUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "PLUS" -0.15:0 "R0")
+                             "PLUS" dbCreateTerm(io_net "PLUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r0"))
+        io_net = dbCreateNet(pcCellView "MINUS")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "MINUS" 1.15:0 "R0")
+                             "MINUS" dbCreateTerm(io_net "MINUS" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r1"))
+    )
+)
 
 
 
diff --git a/pcell_setup/prim_pcell_jinja2.il b/pcell_setup/prim_pcell_jinja2.il
index a257972..cadfca5 100644
--- a/pcell_setup/prim_pcell_jinja2.il
+++ b/pcell_setup/prim_pcell_jinja2.il
@@ -31,15 +31,19 @@
      (nf string "1")
     )
     let((inst iopin_master io_net io_pin)
-        wval = atoi(w)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
         nval = atoi(nf)
         inst = dbCreateParamInstByMasterName( pcCellView "{{ tech_lib }}" "{{ model }}" "symbol"
                                               "N0" -0.375:0 "R0" 1
-                                              list(list("hspiceModelMenu" "string" "{{ model_thres }}")
-                                                   list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("hspiceModel" "string" "{{ model_thres }}")
+                                                   list("hspiceModelMenu" "string" "{{ model_thres }}")
+                                                   list("w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("{{ model_thres }}_l0_w" "string" sprintf(nil "%0.2f" wval))
+                                                   list("l" "string" sprintf(nil "%0.2f" lval))
+                                                   list("{{ model_thres }}_l" "string" sprintf(nil "%0.2f" lval))
                                                    list("m" "string" nf)
-                                                   list("totalW" "string" sprintf(nil "%dn" wval * nval)))
+                                                   list("totalW" "string" sprintf(nil "%0.2f" wval * nval)))
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
         io_net = dbCreateNet(pcCellView "D")
@@ -62,18 +66,25 @@
 )
 {% endfor %}
 
-{% for intent, model in res_list  %}
+{% for intent, model, w_def, l_def in res_list  %}
 ; res_{{ intent }}/{{ model }}
 pcDefinePCell(
     list( lib_obj "res_{{ intent }}" "schematic" "schematic")
-    ((w string "{{ res_w_default }}")
-     (l string "{{ res_l_default }}")
+    ((w string "{{ w_def }}")
+     (l string "{{ l_def }}")
     )
     let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
+        wstr = sprintf(nil "%0.3f" wval)
+        lstr = sprintf(nil "%0.3f" lval)
         inst = dbCreateParamInstByMasterName( pcCellView "{{ tech_lib }}" "{{ model }}" "symbol"
                                               "R0" 0.5:0 "R270" 1
-                                              list(list("w" "string" w)
-                                                   list("l" "string" l)
+                                              list(list("segW" "string" wstr)
+                                                   list("w" "string" wstr)
+                                                   list("segL" "string" lstr)
+                                                   list("l" "string" lstr)
+                                                   list("rCalcMethod" "string" "Segment Length")
                                                   )
                                             )
         iopin_master = dbOpenCellViewByType("basic" "iopin" "symbolr" nil "r")
@@ -85,28 +96,32 @@
         io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "MINUS" -0.15:0 "R0")
                              "MINUS" dbCreateTerm(io_net "MINUS" "inputOutput"))
         dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "MINUS"))
+        io_net = dbCreateNet(pcCellView "BULK")
+        io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "BULK" -0.15:-0.4 "R0")
+                             "BULK" dbCreateTerm(io_net "BULK" "inputOutput"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "B"))
     )
 )
 {% endfor %}
 
-{% for layer, model, rsq in res_metal_list  %}
-; res_metal_{{ layer }}/{{ model }}
+{% for layer in res_metal_list  %}
+; res_metal_{{ layer }}/mrm{{ layer }}
 pcDefinePCell(
     list( lib_obj "res_metal_{{ layer }}" "schematic" "schematic")
     ((w string "{{ res_metal_w_default }}")
      (l string "{{ res_metal_l_default }}")
     )
-    let((inst iopin_master io_net io_pin wval lval rval)
-        wval = cdfParseFloatString(w)
-        lval = cdfParseFloatString(l)
-        rval = {{ rsq }}*lval/wval
-        inst = dbCreateParamInstByMasterName( pcCellView "{{ tech_lib }}" "{{ model }}" "symbol"
+    let((inst iopin_master io_net io_pin)
+        wval = cdfParseFloatString(w) * 1e6
+        lval = cdfParseFloatString(l) * 1e6
+        wstr = sprintf(nil "%0.3f" wval)
+        lstr = sprintf(nil "%0.3f" lval)
+        inst = dbCreateParamInstByMasterName( pcCellView "{{ tech_lib }}" "res" "symbol"
                                               "R0" 0.1:0 "R90" 1
-                                              list(list("w" "string" w)
-                                                   list("l" "string" l)
-                                                   list("effw" "string" w)
-                                                   list("effl" "string" l)
-                                                   list("r" "float" rval)
+                                              list(list("resistorTypr" "string" "met{{ layer }}")
+                                                   list("rw" "string" wstr)
+                                                   list("rl" "string" lstr)
+                                                   list("model" "string" "mrm{{ layer }}")
                                                   )
                                             )
 
@@ -114,11 +129,11 @@
         io_net = dbCreateNet(pcCellView "PLUS")
         io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "PLUS" -0.15:0 "R0")
                              "PLUS" dbCreateTerm(io_net "PLUS" "inputOutput"))
-        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "PLUS"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r0"))
         io_net = dbCreateNet(pcCellView "MINUS")
         io_pin = dbCreatePin(io_net dbCreateInst(pcCellView iopin_master "MINUS" 1.15:0 "R0")
                              "MINUS" dbCreateTerm(io_net "MINUS" "inputOutput"))
-        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "MINUS"))
+        dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "r1"))
     )
 )
 {% endfor %}
@@ -160,4 +175,4 @@
         dbCreateInstTerm(io_net inst dbFindTermByName(inst~>master "MINUS"))
     )
 )
-{% endfor %}
\ No newline at end of file
+{% endfor %}
diff --git a/src/BAG_prim/__init__.py b/src/BAG_prim/__init__.py
index 7e4a026..50fa21e 100644
--- a/src/BAG_prim/__init__.py
+++ b/src/BAG_prim/__init__.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,3 +20,4 @@
 # https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
diff --git a/src/BAG_prim/schematic/__init__.py b/src/BAG_prim/schematic/__init__.py
index 7e4a026..50fa21e 100644
--- a/src/BAG_prim/schematic/__init__.py
+++ b/src/BAG_prim/schematic/__init__.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,3 +20,4 @@
 # https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
diff --git a/src/BAG_prim/schematic/mim_34.py b/src/BAG_prim/schematic/mim_34.py
new file mode 100644
index 0000000..81be80a
--- /dev/null
+++ b/src/BAG_prim/schematic/mim_34.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# 
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
+from typing import Any
+
+
+from bag.design.module import MIMModuleBase
+from bag.design.database import ModuleDB
+from bag.util.immutable import Param
+
+
+# noinspection PyPep8Naming
+class BAG_prim__mim_34(MIMModuleBase):
+    """design module for BAG_prim__mim_34.
+    """
+
+    def __init__(self, database: ModuleDB, params: Param, **kwargs: Any) -> None:
+        MIMModuleBase.__init__(self, '', database, params, **kwargs)
diff --git a/src/BAG_prim/schematic/mim_45.py b/src/BAG_prim/schematic/mim_45.py
new file mode 100644
index 0000000..9ce7ed4
--- /dev/null
+++ b/src/BAG_prim/schematic/mim_45.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# 
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
+from typing import Any
+
+
+from bag.design.module import MIMModuleBase
+from bag.design.database import ModuleDB
+from bag.util.immutable import Param
+
+
+# noinspection PyPep8Naming
+class BAG_prim__mim_45(MIMModuleBase):
+    """design module for BAG_prim__mim_45.
+    """
+
+    def __init__(self, database: ModuleDB, params: Param, **kwargs: Any) -> None:
+        MIMModuleBase.__init__(self, '', database, params, **kwargs)
diff --git a/src/BAG_prim/schematic/mim_standard.py b/src/BAG_prim/schematic/mim_standard.py
new file mode 100644
index 0000000..da395a1
--- /dev/null
+++ b/src/BAG_prim/schematic/mim_standard.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# 
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
+from typing import Any
+
+
+from bag.design.module import MIMModuleBase
+from bag.design.database import ModuleDB
+from bag.util.immutable import Param
+
+
+# noinspection PyPep8Naming
+class BAG_prim__mim_standard(MIMModuleBase):
+    """design module for BAG_prim__mim_standard.
+    """
+
+    def __init__(self, database: ModuleDB, params: Param, **kwargs: Any) -> None:
+        MIMModuleBase.__init__(self, '', database, params, **kwargs)
diff --git a/src/BAG_prim/schematic/nmos4_hv.py b/src/BAG_prim/schematic/nmos4_hv.py
index 75227ca..efe2caf 100644
--- a/src/BAG_prim/schematic/nmos4_hv.py
+++ b/src/BAG_prim/schematic/nmos4_hv.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,7 +21,6 @@
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
 
-
 from typing import Any
 
 
diff --git a/src/BAG_prim/schematic/nmos4_hvesd.py b/src/BAG_prim/schematic/nmos4_hvesd.py
index bbc9f14..b706045 100644
--- a/src/BAG_prim/schematic/nmos4_hvesd.py
+++ b/src/BAG_prim/schematic/nmos4_hvesd.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/src/BAG_prim/schematic/nmos4_lvt.py b/src/BAG_prim/schematic/nmos4_lvt.py
index bedee15..33e42c3 100644
--- a/src/BAG_prim/schematic/nmos4_lvt.py
+++ b/src/BAG_prim/schematic/nmos4_lvt.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/src/BAG_prim/schematic/nmos4_standard.py b/src/BAG_prim/schematic/nmos4_standard.py
index 3ed932b..fea126d 100644
--- a/src/BAG_prim/schematic/nmos4_standard.py
+++ b/src/BAG_prim/schematic/nmos4_standard.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/src/BAG_prim/schematic/nmos4_svt.py b/src/BAG_prim/schematic/nmos4_svt.py
index e174e82..7406495 100644
--- a/src/BAG_prim/schematic/nmos4_svt.py
+++ b/src/BAG_prim/schematic/nmos4_svt.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/src/BAG_prim/schematic/pmos4_hv.py b/src/BAG_prim/schematic/pmos4_hv.py
index 437df1a..cbb1d6f 100644
--- a/src/BAG_prim/schematic/pmos4_hv.py
+++ b/src/BAG_prim/schematic/pmos4_hv.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/src/BAG_prim/schematic/pmos4_hvesd.py b/src/BAG_prim/schematic/pmos4_hvesd.py
index 9a7da7b..fa771c0 100644
--- a/src/BAG_prim/schematic/pmos4_hvesd.py
+++ b/src/BAG_prim/schematic/pmos4_hvesd.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/src/BAG_prim/schematic/pmos4_hvt.py b/src/BAG_prim/schematic/pmos4_hvt.py
index c7e32a0..229c2af 100644
--- a/src/BAG_prim/schematic/pmos4_hvt.py
+++ b/src/BAG_prim/schematic/pmos4_hvt.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/src/BAG_prim/schematic/pmos4_lvt.py b/src/BAG_prim/schematic/pmos4_lvt.py
index 73519c8..a0b7b3a 100644
--- a/src/BAG_prim/schematic/pmos4_lvt.py
+++ b/src/BAG_prim/schematic/pmos4_lvt.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/src/BAG_prim/schematic/pmos4_standard.py b/src/BAG_prim/schematic/pmos4_standard.py
index 5432df4..5c610f3 100644
--- a/src/BAG_prim/schematic/pmos4_standard.py
+++ b/src/BAG_prim/schematic/pmos4_standard.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/src/BAG_prim/schematic/pmos4_svt.py b/src/BAG_prim/schematic/pmos4_svt.py
index c1ee848..b8df7f7 100644
--- a/src/BAG_prim/schematic/pmos4_svt.py
+++ b/src/BAG_prim/schematic/pmos4_svt.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/src/BAG_prim/schematic/res_high_res.py b/src/BAG_prim/schematic/res_high_res.py
new file mode 100644
index 0000000..3512a82
--- /dev/null
+++ b/src/BAG_prim/schematic/res_high_res.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# 
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
+
+from typing import Any
+
+
+from bag.design.module import ResPhysicalModuleBase
+from bag.design.database import ModuleDB
+from bag.util.immutable import Param
+
+
+# noinspection PyPep8Naming
+class BAG_prim__res_high_res(ResPhysicalModuleBase):
+    """design module for BAG_prim__res_high_res.
+    """
+
+    def __init__(self, database: ModuleDB, params: Param, **kwargs: Any) -> None:
+        ResPhysicalModuleBase.__init__(self, '', database, params, **kwargs)
diff --git a/src/BAG_prim/schematic/res_metal_1.py b/src/BAG_prim/schematic/res_metal_1.py
new file mode 100644
index 0000000..ca9405e
--- /dev/null
+++ b/src/BAG_prim/schematic/res_metal_1.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# 
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
+from typing import Any
+
+
+from bag.design.module import ResMetalModule
+from bag.design.database import ModuleDB
+from bag.util.immutable import Param
+
+
+# noinspection PyPep8Naming
+class BAG_prim__res_metal_1(ResMetalModule):
+    """design module for BAG_prim__res_metal_1.
+    """
+
+    def __init__(self, database: ModuleDB, params: Param, **kwargs: Any) -> None:
+        ResMetalModule.__init__(self, '', database, params, **kwargs)
diff --git a/src/BAG_prim/schematic/res_standard.py b/src/BAG_prim/schematic/res_standard.py
new file mode 100644
index 0000000..c882d53
--- /dev/null
+++ b/src/BAG_prim/schematic/res_standard.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# 
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
+from typing import Any
+
+
+from bag.design.module import ResPhysicalModuleBase
+from bag.design.database import ModuleDB
+from bag.util.immutable import Param
+
+
+# noinspection PyPep8Naming
+class BAG_prim__res_standard(ResPhysicalModuleBase):
+    """design module for BAG_prim__res_standard.
+    """
+
+    def __init__(self, database: ModuleDB, params: Param, **kwargs: Any) -> None:
+        ResPhysicalModuleBase.__init__(self, '', database, params, **kwargs)
diff --git a/src/templates_skywater130/data/tech_params.yaml b/src/templates_skywater130/data/tech_params.yaml
old mode 100644
new mode 100755
index c8c49ec..c5c4cd2
--- a/src/templates_skywater130/data/tech_params.yaml
+++ b/src/templates_skywater130/data/tech_params.yaml
@@ -17,7 +17,6 @@
 # https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
-
 # PDK library name.
 tech_lib: 'skywater130'
 # layout unit, in meters.
@@ -41,8 +40,19 @@
   ptap: !!python/tuple ['psdm', 'drawing']
   ntap: !!python/tuple ['nsdm', 'drawing']
 
-# mapping from metal layer ID to layer/purpose pair that defines
-# a metal resistor.
+mos_lay_table:
+  # poly
+  PO: !!python/tuple ['poly', 'drawing']
+  # active
+  OD:
+    active: !!python/tuple ['diff', 'drawing']
+    sub: !!python/tuple ['tap', 'drawing']
+  # gate connection metal
+  MP: !!python/tuple ['li1', 'drawing']
+  # OC connection metal
+  MD: !!python/tuple ['li1', 'drawing']
+
+# mapping from metal layer ID to layer/purpose pair that defines a metal resistor.
 res_metal_layer_table: {}
 #  1: [!!python/tuple ['met1', 'res']]
 #  2: [!!python/tuple ['met2', 'res']]
@@ -50,8 +60,7 @@
 #  4: [!!python/tuple ['met4', 'res']]
 #  5: [!!python/tuple ['met5', 'res']]
 
-# mapping from metal layer ID to layer/purpose pair that
-# defines metal exclusion region.
+# mapping from metal layer ID to layer/purpose pair that defines metal exclusion region.
 metal_exclude_table: {}
 #  1: !!python/tuple ['met1', 'drawing']
 #  2: !!python/tuple ['met2', 'drawing']
@@ -63,6 +72,7 @@
 
 # mapping from metal layer ID to metal layer name.  Assume purpose is 'drawing'.
 lay_purp_list: &lp_list
+  0: [!!python/tuple ['li1', 'drawing']]
   1: [!!python/tuple ['met1', 'drawing']]
   2: [!!python/tuple ['met2', 'drawing']]
   3: [!!python/tuple ['met3', 'drawing']]
@@ -73,25 +83,24 @@
 dum_lay_purp_list: *lp_list
 
 width_intervals:
+  0:
+    - [[28, 801]]   # horizontal
+    - [[28, .inf]]  # vertical
   1:
-    - [[28, 801]]
-    - [[28, .inf]]
+    - [[28, .inf]]  # horizontal
+    - [[28, 801]]   # vertical
   2:
-    - [[28, .inf]]
     - [[28, 801]]
+    - [[28, .inf]]
   3:
+    - [[60, .inf]]
     - [[60, 801]]
-    - [[60, .inf]]
   4:
-    - [[60, .inf]]
     - [[60, 2001]]
+    - [[60, .inf]]
   5:
-    - [[284, .inf]]
-    - [[284, .inf]]
-  
-  6:
-    - [[60, .inf]]
-    - [[60, 2001]]
+    - [[320, .inf]]
+    - [[320, .inf]]
 
 # mapping from tuple of via layers to via ID.
 via_id:
@@ -124,9 +133,17 @@
     scale: [1.0, 0.5]
 
 # via enclosure/spacing rules
-flipped_vias: [TPL1_C, L1M1_C, M1M2_C, M2M3_C, M3M4_C, M4M5_C]
+flipped_vias: [TPL1_C, PYL1_C, L1M1_C, M1M2_C, M2M3_C, M3M4_C, M4M5_C]
 via_square_list: [square]
 via:
+  L1M1_C:
+    - name: square
+      dim: [34, 34]
+      sp: [38, 38]
+      bot_enc:
+        - [.inf, [[0, 0]]]
+      top_enc:
+        - [.inf, [[12, 12]]]
   M1M2_C:
     - name: square
       dim: [30, 30]
@@ -147,7 +164,7 @@
       dim: [40, 40]
       sp: [40, 40]
       bot_enc:
-        - [.inf, [[18, 11], [11, 18]]]
+        - [.inf, [[18, 11], [11, 18]]] #x, y enclosure
       top_enc:
         - [.inf, [[13, 13]]]
   M4M5_C:
@@ -162,29 +179,37 @@
 # minimum wire spacing rule.  Space is measured orthogonal to wire direction.
 # should be in resolution units
 sp_min:
+  [li1, drawing]:
+    - [.inf, 34]
   [met1, drawing]: &sp_min_1x
-    - [.inf, 100]
+    - [.inf, 28]
   [met2, drawing]: *sp_min_1x
   [met3, drawing]: &sp_min_2x
-    - [.inf, 60] #60
+    - [.inf, 60]
   [met4, drawing]: *sp_min_2x
   [met5, drawing]:
     - [.inf, 320]
 
 # minimum line-end spacing rule.  Space is measured parallel to wire direction.
 sp_le_min:
+  [li1, drawing]:
+    - [.inf, 34]
   [met1, drawing]: &sp_le_min_1x
-    - [.inf, 100] #change from 28
+    - [.inf, 28]
   [met2, drawing]: *sp_le_min_1x
   [met3, drawing]: &sp_le_min_2x
     - [.inf, 60]
   [met4, drawing]: *sp_le_min_2x
   [met5, drawing]:
     - [.inf, 320]
-  
+
 
 # minimum length/minimum area rules.
 len_min:
+  [li1, drawing]:
+    w_al_list:
+      - [.inf, 2244, 0]
+    md_al_list: []
   [met1, drawing]:
     w_al_list:
       - [.inf, 3320, 0]
@@ -205,10 +230,6 @@
     w_al_list:
       - [.inf, 160000, 0]
     md_al_list: []
-  #[capm, drawing]:
-  #  w_al_list:
-  #    - [.inf, 9600, 0]
-  #  md_al_list: []
 
 margins:
   well: [40, 40]
@@ -216,7 +237,7 @@
 # transistor DRC rules.
 mos:
   # MOSBase vertical connection layer
-  conn_layer: 1
+  conn_layer: 0
   # min/max transistor width.
   mos_w_range: [84, 1400]
   # transistor width resolution
@@ -225,22 +246,23 @@
   # source/drain pitch is computed as val[0] + val[1] * lch_unit
   sd_pitch_constants:
     lch: [30, .inf]
-    val: [[172, 0], [42, 1]]
+    val: [[86, 0]]
   # drain connection info
   d_wire_info:
     bot_layer: 0
     # wire_w, is_horiz, v_w, v_h, v_sp, v_bot_enc, v_top_enc
     info_list:
-      - [34, False, 34, 34, 34, 12, 16]
-      - [52, False, 34, 34, 38, 8, 12]
+      - [34, False, 34, 34, 34, 8, 16]
   # gate connection info
   g_wire_info:
     bot_layer: 0
     # wire_w, is_horiz, v_w, v_h, v_sp, v_bot_enc, v_top_enc
     info_list:
-      - [34, True, 34, 34, 34, 10, 10]
-      - [52, False, 34, 34, 38, 8, 12]
-
+      - [34, False, 34, 34, 34, 10, 16]
+  # horizontal margin for abutting with another ResTech or MosTech
+  edge_margin: 86   # TODO: currently sekt to 1 pitch
+  # vertical margin for abutting with another ResTech or MosTech
+  end_margin: 86    # TODO: currently set to 1 pitch
   # minimum horizontal space between OD, in resolution units
   od_spx: 54
   # minimum vertical space between OD, in resolution units
@@ -250,7 +272,14 @@
   # maximum vertical space between OD, in resolution units
   od_spy_max: 4000
   # set by via enclosure, licon.5
-  od_po_extx: 96
+  # od_po_extx: 54 #96
+  od_po_extx: 76
+  # set by via enclosure for tap, licon.7
+  # This is in absolute resolution units of enclosure of licon, directly corresponds to licon.7 value
+  od_tap_extx: 24
+
+  # M1 pitch
+  blk_h_pitch: 86
 
   # poly.2
   po_spy: 42
@@ -271,25 +300,131 @@
   md_area_min: 2244
   md_spy: 34
 
+  # n/psdm.3, minimum spacing in x direction between same type OD implants in res units
+  imp_same_sp: 76
+  # n/psdm.7, minimum spacing in y direction between opposite OD implants in res units
+  imp_diff_sp: 26
   # nsdm.7
   imp_od_encx: 26
   # nsdm.7
   imp_od_ency: 26
   # nsdm.1
-  imp_h_min: 76
+  imp_h_min: 86
 
-  #might be redundant, well margin from edge to implant
+  # might be redundant, well margin from edge to implant
   nwell_imp: 40
 
-  grid_info:
-    - [1, 52, 1]
-    - [3, 66, 1]
-    - [5, 284, 1]
+  latchup: # rules relating to MOS latchup
+    # maximum distance from tap >=50u from signal diffusion in res units
+    max_distance_from_tap__far: 3000
+    # maximum distance from tap near signal diffusion in res units
+    max_distance_from_tap__near: 1200
+
+  grid_info: # [layer, width, track width]
+    - [0, 34, 52, 1]
+    - [2, 56, 30, 1]
+    - [4, 66, 106, 1]
 
 fill: {}
 
 res_metal: {}
 
+res_lay_table:
+  PO: !!python/tuple ['poly', 'drawing']
+  ID: !!python/tuple ['poly', 'res']
+  CUT: !!python/tuple ['poly', 'cut']
+  NPC: !!python/tuple ['npc', 'drawing']
+  IMP: !!python/tuple ['psdm', 'drawing']
+  OD_sub: !!python/tuple ['tap', 'drawing']
+
+# resistor DRC rules
+res:
+  # ArrayBase vertical connection layer
+  conn_layer: 0
+  # Default mos conn type (unused)
+  mos_type_default: 'pch'
+  # Default threshold (unused)
+  threshold_default: 'lvt'
+  # Has substrate port
+  has_substrate_port: True
+  # Default sub type
+  sub_type_default: 'ptap'
+  # minimum width of unit resistor
+  w_min: 66
+  # minimum length of unit resistor
+  l_min: 100
+  # w / h of minimum resistor unit
+  min_size: !!python/tuple [172, 1376]
+  # block x / y pitch
+  blk_pitch: !!python/tuple [86, 86]
+  # grid info of vertical metals
+  grid_info:
+    - [0, 34, 52]
+    - [2, 56, 30]
+    - [4, 66, 106]
+  # horizontal margin for abutting with another ResTech or MosTech
+  edge_margin: 86   # TODO: currently set to 1 pitch
+  # vertical margin for abutting with another ResTech or MosTech
+  end_margin: 86    # TODO: currently set to 1 pitch
+  # poly vertical extension beyond resID layer
+  po_id_exty: 416
+  # npc enclosure of poly in any direction
+  npc_po_enc: 19
+  # psdm enclosure of npc
+  imp_npc_enc: [3, 51]
+  # tap implant height
+  tap_imp_h: 134
+  # tap height
+  tap_h: 82
+  # resistor layer enclosure of npc in any direction
+  rlay_npc_enc: 21
+  # space between adjacent npc layers
+  npc_sp: 54
+  # resistor layer based on type
+  rlay:
+    standard: !!python/tuple ['rpm', 'drawing']
+    high_res: !!python/tuple ['urpm', 'drawing']
+  # specs for via from PO to conn_layer (li1)
+  po_via_specs:
+    name: PYL1_C
+    dim: [38, 400]
+    bot_enc: [11, 16]
+    top_enc: [16, 16]
+    spx: 102
+  # specs for via from tap to conn_layer (li1)
+  tap_via_specs:
+    name: TPL1_C
+    dim: [34, 34]
+    bot_enc: [24, 24]
+    top_enc: [16, 16]
+    spx: 45
+
+# mim cap DRC rules
+mim:
+  # capm.1 minimum width
+  min_width: 400
+  # capm.2b min bottom plate to bottom plate split
+  bot_bot_sp: 200
+  # capm.3 enclosure of top metal around capm
+  top_to_cap_sp: 28
+  # capm.4 space between via and capm edge
+  capvia_cap: 40
+  # capm.5 space between non-cap via & capm layer when connected by layer
+  cap_via2_sp: 254
+  # capm.6  width to length or length to width
+  max_ratio: 20
+  # capm.8 Minimum space between non-cap via and capm layer when no overlap
+  via_cap_sp: 28
+  # capm.11 Min space between capm to metal2
+  capm_met_sp: 100
+
+  cap_info: # top_layer: [(layer, purpose), width, spacing]
+    4: [!!python/tuple ['capm', 'drawing'], 400, 168]
+    5: [!!python/tuple ['cap2m', 'drawing'], 400, 168]
+  via_info: # bot layer: type, dimension, space, bot_enc, top_enc]
+    3: ['M3M4_C', 40, 40, 18, 13]
+    4: ['M4M5_C', 160, 160, 38, 62]
+
 layer:
   nwell: 0
   pwell: 1
@@ -316,6 +451,8 @@
   psdm: 31
   hvntm: 36
   cnsm: 37
+  r1v: 39
+  r1c: 40
   tunm: 41
   hvi: 42
   licon1: 43
@@ -390,6 +527,60 @@
   pwde: 170
   pwbm: 173
   uhvi: 174
+  Unrouted: 200
+  Row: 201
+  Group: 202
+  Cannotoccupy: 203
+  Canplace: 204
+  hardFence: 205
+  softFence: 206
+  y0: 207
+  y1: 208
+  y2: 209
+  y3: 210
+  y4: 211
+  y5: 212
+  y6: 213
+  y7: 214
+  y8: 215
+  y9: 216
+  designFlow: 217
+  stretch: 218
+  edgeLayer: 219
+  changedLayer: 220
+  unset: 221
+  unknown: 222
+  spike: 223
+  hiz: 224
+  resist: 225
+  drive: 226
+  supply: 227
+  wire: 228
+  pin: 229
+  text: 230
+  device: 231
+  border: 232
+  snap: 233
+  align: 234
+  prBoundary: 235
+  instance: 236
+  annotate: 237
+  marker: 238
+  select: 239
+  substrate: 240
+  solderMaskBottom: 241
+  beginGenericLayer: 242
+  internalGenericLayer: 243
+  endGenericLayer: 244
+  solderMaskTop: 245
+  drill: 246
+  wirebond: 247
+  wirebondFingerGuide: 248
+  assemblyBoundary: 249
+  grid: 251
+  axis: 252
+  hilite: 253
+  background: 254
 purpose:
   seal: 1
   core: 2
@@ -515,17 +706,24 @@
   rfdiode: 125
   lowTapDensity: 126
   notCritSide: 127
-  oaCustomFill: 4294967284
-  oaFillOPC: 4294967285
-  redundant: 4294967288
-  gapFill: 4294967289
-  annotation: 4294967290
-  OPCAntiSerif: 4294967291
-  OPCSerif: 4294967292
-  slot: 4294967293
-  fill: 4294967294
-  drawing: 4294967295
+  fabBlock: 128
+  dynamic: 222
+  fatal: 223
+  critical: 224
+  soCritical: 225
+  soError: 226
+  ackWarn: 227
+  info: 228
+  track: 229
+  blockage: 230
+  grid: 231
+  warning: 234
+  tool1: 235
+  tool0: 236
   label: 237
+  flight: 238
+  error: 239
+  annotate: 240
   drawing1: 241
   drawing2: 242
   drawing3: 243
@@ -537,344 +735,45 @@
   drawing9: 249
   boundary: 250
   pin: 251
+  net: 253
+  cell: 254
+  all: 255
+  customFill: 4294967284
+  fillOPC: 4294967285
+  redundant: 4294967288
+  gapFill: 4294967289
+  annotation: 4294967290
+  OPCAntiSerif: 4294967291
+  OPCSerif: 4294967292
+  slot: 4294967293
+  fill: 4294967294
+  drawing: 4294967295
 via_layers:
-  TPM2sd_varactor:
-    - [0, 4294967295]
-    - [3604534, 4294967295]
-    - [43, 4294967295]
-  TPM1sd_varactor:
-    - [0, 4294967295]
-    - [6488162, 4294967295]
-    - [43, 4294967295]
-  DFM1sd2:
-    - [2, 4294967295]
-    - [0, 4294967295]
-    - [43, 4294967295]
-  DFTPL1s2:
-    - [2, 4294967295]
-    - [3, 4294967295]
-    - [43, 4294967295]
-  hvDFL1sd2:
-    - [2, 4294967295]
-    - [8, 4294967295]
-    - [43, 4294967295]
-  hvDFTPM1s2:
-    - [2, 4294967295]
-    - [33, 4294967295]
-    - [43, 4294967295]
-  DFL1sdf:
-    - [2, 4294967295]
-    - [99, 4294967295]
-    - [43, 4294967295]
-  DFTPL1s:
-    - [2, 4294967295]
-    - [108, 4294967295]
-    - [43, 4294967295]
-  hvDFL1sd:
-    - [2, 4294967295]
-    - [128, 4294967295]
-    - [43, 4294967295]
-  DFTPM1s:
-    - [2, 4294967295]
-    - [508, 4294967295]
-    - [43, 4294967295]
-  pDFL1_PR:
-    - [2, 4294967295]
-    - [514, 4294967295]
+  TPL1_C:
     - [22, 4294967295]
-  hvDFTPM1s:
-    - [2, 4294967295]
-    - [16908545, 4294967295]
     - [43, 4294967295]
-  DFM1sd:
-    - [2, 4294967295]
-    - [27881312, 4294967295]
-    - [43, 4294967295]
-  DFL1sd2:
-    - [2, 4294967295]
-    - [27904192, 4294967295]
-    - [43, 4294967295]
-  hvDFM1sd:
-    - [2, 4294967295]
-    - [27909216, 4294967295]
-    - [43, 4294967295]
-  DFM1:
-    - [2, 4294967295]
-    - [27912840, 4294967295]
-    - [43, 4294967295]
-  hvDFTPM1s2enh:
-    - [2, 4294967295]
-    - [27919592, 4294967295]
-    - [43, 4294967295]
-  DFTPM1sw:
-    - [2, 4294967295]
-    - [27922480, 4294967295]
-    - [43, 4294967295]
-  DFL1:
-    - [2, 4294967295]
-    - [471538201, 4294967295]
-    - [43, 4294967295]
-  nDFL1_PR:
-    - [2, 4294967295]
-    - [697935992, 4294967295]
-    - [22, 4294967295]
-  DFL1sd:
-    - [2, 4294967295]
-    - [743437048, 4294967295]
-    - [43, 4294967295]
-  DFTPM1s2enh:
-    - [2, 4294967295]
-    - [1634216811, 4294967295]
-    - [43, 4294967295]
-  hvDFM1sd2:
-    - [2, 4294967295]
-    - [3355443200, 4294967295]
-    - [43, 4294967295]
-  TPL1_fence:
     - [3, 4294967295]
-    - [128, 4294967295]
-    - [43, 4294967295]
-  TPL1sq:
-    - [3, 4294967295]
-    - [12255418, 4294967295]
-    - [43, 4294967295]
-  TPL1:
-    - [3, 4294967295]
-    - [22217042, 4294967295]
-    - [43, 4294967295]
-  TPM1s:
-    - [3, 4294967295]
-    - [27908744, 4294967295]
-    - [43, 4294967295]
-  TPL1s:
-    - [3, 4294967295]
-    - [27910816, 4294967295]
-    - [43, 4294967295]
-  TPL1a:
-    - [3, 4294967295]
-    - [79038577, 4294967295]
-    - [43, 4294967295]
-  pTPL1_PR:
-    - [3, 4294967295]
-    - [84214787, 4294967295]
-    - [22, 4294967295]
-  TPL1cen:
-    - [3, 4294967295]
-    - [155912518, 4294967295]
-    - [43, 4294967295]
-  nTPL1_PR:
-    - [3, 4294967295]
-    - [697935816, 4294967295]
-    - [22, 4294967295]
-  TPM1:
-    - [3, 4294967295]
-    - [3355443200, 4294967295]
-    - [43, 4294967295]
-  HRPoly_0p69_RPL1con:
-    - [4, 4294967295]
-    - [0, 4294967295]
-    - [43, 4294967295]
-  PYL1sq:
-    - [4, 4294967295]
-    - [1, 4294967295]
-    - [115, 4294967295]
-  PYM2_varactor:
-    - [4, 4294967295]
-    - [33, 4294967295]
-    - [115, 4294967295]
   PYL1_C:
     - [4, 4294967295]
     - [43, 4294967295]
     - [22, 4294967295]
-  PYL1:
-    - [4, 4294967295]
-    - [113, 4294967295]
-    - [115, 4294967295]
-  PYM1_varactor:
-    - [4, 4294967295]
-    - [720906, 4294967295]
-    - [115, 4294967295]
-  HRPoly_2p85_RPL1con:
-    - [4, 4294967295]
-    - [16843009, 4294967295]
-    - [43, 4294967295]
-  PYM1butt_varactor:
-    - [4, 4294967295]
-    - [27911952, 4294967295]
-    - [115, 4294967295]
-  HRPoly_5p73_RPL1con:
-    - [4, 4294967295]
-    - [144574618, 4294967295]
-    - [43, 4294967295]
-  PYM2butt_varactor:
-    - [4, 4294967295]
-    - [697935800, 4294967295]
-    - [115, 4294967295]
-  PYL1_PR:
-    - [4, 4294967295]
-    - [1195787588, 4294967295]
-    - [22, 4294967295]
-  HRPoly_1p41_RPL1con:
-    - [4, 4294967295]
-    - [1610612736, 4294967295]
-    - [43, 4294967295]
-  PYM1:
-    - [4, 4294967295]
-    - [3355443200, 4294967295]
-    - [115, 4294967295]
-  HRPoly_5p73_L1M1con:
-    - [5, 4294967295]
-    - [0, 4294967295]
-    - [22, 4294967295]
-  L1M2:
-    - [5, 4294967295]
-    - [513, 4294967295]
-    - [22, 4294967295]
-  HRPoly_1p41_L1M1con:
-    - [5, 4294967295]
-    - [16843009, 4294967295]
-    - [22, 4294967295]
-  L1M1sq:
-    - [5, 4294967295]
-    - [27916880, 4294967295]
-    - [22, 4294967295]
-  HRPoly_2p85_L1M1con:
-    - [5, 4294967295]
-    - [160369032, 4294967295]
-    - [22, 4294967295]
-  L1M1:
-    - [5, 4294967295]
-    - [697935800, 4294967295]
-    - [22, 4294967295]
   L1M1_C:
     - [6, 4294967295]
     - [5, 4294967295]
     - [22, 4294967295]
-  M1M2:
-    - [6, 4294967295]
-    - [33, 4294967295]
-    - [8, 4294967295]
-  M1M2_PR:
-    - [6, 4294967295]
-    - [43, 4294967295]
-    - [8, 4294967295]
-  ruleVia1:
-    - [6, 4294967295]
-    - [27908184, 4294967295]
-    - [8, 4294967295]
-  ruleVia:
-    - [6, 4294967295]
-    - [27908928, 4294967295]
-    - [8, 4294967295]
-  M1M2sq:
-    - [6, 4294967295]
-    - [27911664, 4294967295]
-    - [8, 4294967295]
-  M1M2_PR_R:
-    - [6, 4294967295]
-    - [743551240, 4294967295]
-    - [8, 4294967295]
-  ruleVia2:
-    - [8, 4294967295]
-    - [0, 4294967295]
-    - [10, 4294967295]
   M1M2_C:
     - [8, 4294967295]
     - [7, 4294967295]
     - [6, 4294967295]
-  M2M3_PR_R:
-    - [8, 4294967295]
-    - [9, 4294967295]
-    - [10, 4294967295]
-  M2M3_PR:
-    - [8, 4294967295]
-    - [43, 4294967295]
-    - [10, 4294967295]
-  M2M3sq:
-    - [8, 4294967295]
-    - [27907824, 4294967295]
-    - [10, 4294967295]
-  M2M3:
-    - [8, 4294967295]
-    - [27911136, 4294967295]
-    - [10, 4294967295]
-  M3M4sq:
-    - [10, 4294967295]
-    - [0, 4294967295]
-    - [13, 4294967295]
-  M3M4_PR:
-    - [10, 4294967295]
-    - [5, 4294967295]
-    - [13, 4294967295]
-  M3M4:
-    - [10, 4294967295]
-    - [8, 4294967295]
-    - [13, 4294967295]
   M2M3_C:
     - [10, 4294967295]
     - [9, 4294967295]
     - [8, 4294967295]
-  M3M4_PR_R:
-    - [10, 4294967295]
-    - [12, 4294967295]
-    - [13, 4294967295]
-  FUSE_M3M4:
-    - [10, 4294967295]
-    - [257, 4294967295]
-    - [13, 4294967295]
-  ruleVia3:
-    - [10, 4294967295]
-    - [101320202, 4294967295]
-    - [13, 4294967295]
-  M5RDLlg_atlas:
-    - [11, 4294967295]
-    - [1, 4294967295]
-    - [136, 4294967295]
-  M5RDL:
-    - [11, 4294967295]
-    - [743437048, 4294967295]
-    - [136, 4294967295]
-  CAPMM4:
-    - [12, 4294967295]
-    - [12255418, 4294967295]
-    - [75, 4294967295]
-  M4M5sq:
-    - [13, 4294967295]
-    - [0, 4294967295]
-    - [15, 4294967295]
-  M4M5_PR:
-    - [13, 4294967295]
-    - [7, 4294967295]
-    - [15, 4294967295]
   M3M4_C:
     - [13, 4294967295]
     - [12, 4294967295]
     - [10, 4294967295]
-  M4M5_PR_R:
-    - [13, 4294967295]
-    - [14, 4294967295]
-    - [15, 4294967295]
-  M4M5:
-    - [13, 4294967295]
-    - [27911304, 4294967295]
-    - [15, 4294967295]
-  ruleVia4:
-    - [13, 4294967295]
-    - [67372036, 4294967295]
-    - [15, 4294967295]
-  CAP2MM5:
-    - [14, 4294967295]
-    - [9371790, 4294967295]
-    - [86, 4294967295]
   M4M5_C:
     - [15, 4294967295]
     - [14, 4294967295]
     - [13, 4294967295]
-  TPL1_C:
-    - [22, 4294967295]
-    - [43, 4294967295]
-    - [3, 4294967295]
-  L1M1_PR:
-    - [22, 4294967295]
-    - [27902976, 4294967295]
-    - [6, 4294967295]
diff --git a/src/templates_skywater130/mim/__init__.py b/src/templates_skywater130/mim/__init__.py
new file mode 100755
index 0000000..6ae3ea6
--- /dev/null
+++ b/src/templates_skywater130/mim/__init__.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# 
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
diff --git a/src/templates_skywater130/mim/tech.py b/src/templates_skywater130/mim/tech.py
new file mode 100755
index 0000000..2e13f62
--- /dev/null
+++ b/src/templates_skywater130/mim/tech.py
@@ -0,0 +1,280 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# 
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
+from typing import Tuple
+
+from pybag.core import BBox
+
+from bag.layout.tech import TechInfo
+
+from xbase.layout.data import LayoutInfoBuilder, ViaInfo
+from xbase.layout.cap.tech import MIMTech
+from xbase.layout.cap.tech import MIMLayInfo
+
+
+class MIMTechSkywater130(MIMTech):
+    def __init__(self, tech_info: TechInfo) -> None:
+        MIMTech.__init__(self, tech_info)
+
+    # noinspection PyMethodMayBeStatic
+    def get_port_layers(self, mim_type: str) -> Tuple[int, int]:
+        if mim_type == 'standard' or mim_type == '45' or mim_type == 45:
+            return 4, 5
+        if mim_type == '34' or mim_type == 34:
+            return 3, 4
+        raise ValueError(f'Invalid mim_type={mim_type}. Use \'standard\' or \'45\' or \'34\'')
+
+    def get_mim_cap_info(self, bot_layer: int, top_layer: int, unit_width: int, unit_height: int,
+                         num_rows: int, num_cols: int, dum_row_b: int, dum_row_t: int, dum_col_l: int, dum_col_r: int,
+                         bot_w: int, top_w: int) -> MIMLayInfo:
+        assert bot_layer == top_layer - 1, 'MIMCap can exist between adjacent layers only'
+        cap_info = self.mim_config['cap_info']
+        if top_layer not in cap_info:
+            raise ValueError(f'MIMCap does not exist with top_layer={top_layer}')
+
+        cap_lp, cap_w, cap_sp = cap_info[top_layer]
+        bot_lp = self._tech_info.get_lay_purp_list(bot_layer)[0]
+        top_lp = self._tech_info.get_lay_purp_list(top_layer)[0]
+
+        width = num_cols * unit_width
+        width_total = (num_cols + dum_col_l + dum_col_r) * unit_width
+        height = num_rows * unit_height
+        height_total = (num_rows + dum_row_b + dum_row_t) * unit_height
+
+        if dum_row_b > 0 or dum_row_t > 0:
+            raise NotImplementedError('Contact Felicia')
+        if dum_col_r > 0:
+            raise NotImplementedError('Contact Felicia')
+
+        via_info = self.mim_config['via_info']
+        via_type, via_dim, via_sp, via_bot_enc, via_top_enc = via_info[bot_layer]
+
+        if min(width, height) < min(bot_w, top_w):
+            raise ValueError('Unit cell dimensions are too small')
+ 
+        # DRC rules
+        min_width: int = self.mim_config['min_width']
+        ratio: int = self.mim_config['max_ratio'] 
+        cap_bound: int = self.mim_config['top_to_cap_sp']
+
+        if min(width, height) < min_width:
+            raise ValueError(f'Unit cell dimensions have to be larger than {min_width}')
+
+        if top_layer == 4:
+            via_bnd: int = self.mim_config['capvia_cap']
+            bot_sp = -(- cap_sp // 2)
+        else:
+            via_bnd = via_bot_enc
+            bot_sp = bot_w
+      
+        top_ext = 2 * top_w + cap_bound
+        bot_ext = 2 * bot_w + cap_bound
+
+        builder = LayoutInfoBuilder()
+
+        # Cap construction
+        # array
+        if max(num_rows, num_cols) > 1 or max(dum_row_b, dum_row_t, dum_col_l, dum_col_r) > 0:
+            cap_off_h = cap_sp + bot_ext
+
+            if unit_height / unit_width > ratio or unit_width / unit_height > ratio:
+                raise ValueError('Unit dimensions violate DRC rules')
+            
+            tot_rows = num_rows + dum_row_b + dum_row_t
+            tot_cols = num_cols + dum_col_l + dum_col_r
+            block_w = unit_width
+            base_y = bot_sp + cap_bound
+            for ridx in range(0, tot_rows):
+                y_bot = base_y + ridx * (unit_height + cap_off_h)
+                for cidx in range(0, tot_cols):
+                    xl_cap = bot_ext + cidx * (block_w + cap_off_h)
+                    xh_cap = xl_cap + block_w
+                    yl_cap = y_bot
+                    yh_cap = y_bot + unit_height
+
+                    xl_via = xl_cap + via_bnd
+                    xh_via = xh_cap - via_bnd
+                    yl_via = yl_cap + via_bnd
+                    yh_via = yh_cap - via_bnd
+
+                    builder.add_rect_arr(cap_lp, BBox(xl_cap, yl_cap, xh_cap, yh_cap))
+                    builder.add_via(get_via_info(via_type, BBox(xl_via, yl_via, xh_via, yh_via),
+                                                 via_dim, via_sp, via_bot_enc, via_top_enc))
+            if dum_col_l > 0 or dum_col_r > 0:
+                # for the actual cap
+                xl_top = width_total - width + dum_col_l * cap_off_h + bot_ext
+                xh_top = width_total + (tot_cols - 1) * cap_off_h + top_ext + bot_ext + cap_bound
+                yl_top = bot_sp + cap_bound
+                yh_top = height_total + (tot_rows - 1) * cap_off_h + bot_sp + cap_bound
+
+                xl_bot = width_total - width + dum_col_l * cap_off_h
+                xh_bot = width_total + (tot_cols - 1) * cap_off_h + bot_ext + cap_bound
+                yl_bot = bot_sp
+                yh_bot = height_total + (tot_rows - 1) * cap_off_h + 2 * cap_bound + bot_sp
+
+                builder.add_rect_arr(bot_lp, BBox(xl_bot, yl_bot, xh_bot, yh_bot))
+                builder.add_rect_arr(top_lp, BBox(xl_top, yl_top, xh_top, yh_top))
+
+                # for the dummy
+                xl_dtop = bot_ext
+                xh_dtop = width_total - width + (dum_col_l - 1) * cap_off_h + bot_ext + cap_bound
+                yl_dtop = bot_sp + cap_bound
+                yh_dtop = height + (tot_rows - 1) * cap_off_h + bot_sp + cap_bound
+
+                xl_dbot = 0
+                xh_dbot = width_total - width + (dum_col_l - 1) * cap_off_h + bot_ext + cap_bound
+                yl_dbot = bot_sp
+                yh_dbot = height + (tot_rows - 1) * cap_off_h + 2 * cap_bound + bot_sp
+
+                builder.add_rect_arr(bot_lp, BBox(xl_dbot, yl_dbot, xh_dbot, yh_dbot))
+                builder.add_rect_arr(top_lp, BBox(xl_dtop, yl_dtop, xh_dtop, yh_dtop))
+            else:
+                xl_top = bot_ext
+                xh_top = width + (tot_cols - 1) * cap_off_h + top_ext + bot_ext
+                yl_top = bot_sp + cap_bound
+                yh_top = height + (tot_rows - 1) * cap_off_h + bot_sp + cap_bound
+
+                xl_bot = 0
+                xh_bot = width + (tot_cols - 1) * cap_off_h + bot_ext + cap_bound
+                yl_bot = bot_sp
+                yh_bot = height + (tot_rows - 1) * cap_off_h + 2 * cap_bound + bot_sp
+
+                builder.add_rect_arr(bot_lp, BBox(xl_bot, yl_bot, xh_bot, yh_bot))
+                builder.add_rect_arr(top_lp, BBox(xl_top, yl_top, xh_top, yh_top))
+
+            # add top metal and bottom 
+            w_tot = xh_top
+            h_tot = bot_sp + cap_bound + height + tot_rows * cap_off_h
+            
+            pin_bot_yl = bot_sp
+            pin_bot_yh = h_tot - cap_sp
+
+            pin_top_yl = bot_sp + cap_bound
+            pin_top_yh = h_tot - cap_sp
+            pin_bot_xl = width_total - width + dum_col_l * cap_off_h
+            pin_top_xh = w_tot
+
+            bnd_box = BBox(0, 0, w_tot, h_tot)
+
+        # not arrayed
+        else:
+            xl_top = bot_ext
+            xh_top = width + top_ext + bot_ext
+            yl_top = bot_sp + cap_bound
+            yh_top = height + bot_sp + cap_bound
+
+            xl_bot = 0
+            xh_bot = width + bot_ext + cap_bound
+            yl_bot = bot_sp
+            yh_bot = height + 2 * cap_bound + bot_sp
+
+            builder.add_rect_arr(bot_lp, BBox(xl_bot, yl_bot, xh_bot, yh_bot))
+            builder.add_rect_arr(top_lp, BBox(xl_top, yl_top, xh_top, yh_top))
+
+            # This only deals with long widths
+            if width / height > ratio:
+                num_blocks = -(- max(width, height) // (ratio * min(width, height)))
+
+                block_w = -(- (width - (num_blocks - 1) * cap_sp) // num_blocks)
+                for bidx in range(0, num_blocks):
+                    xl_cap = bot_ext + bidx * (block_w + cap_sp)
+                    xh_cap = xl_cap + block_w
+                    yl_cap = bot_sp + cap_bound
+                    yh_cap = yl_cap + height
+
+                    xl_via = xl_cap + via_bnd
+                    xh_via = xh_cap - via_bnd
+                    yl_via = yl_cap + via_bnd
+                    yh_via = yh_cap - via_bnd
+
+                    builder.add_rect_arr(cap_lp, BBox(xl_cap, yl_cap, xh_cap, yh_cap))
+                    builder.add_via(get_via_info(via_type, BBox(xl_via, yl_via, xh_via, yh_via),
+                                                 via_dim, via_sp, via_bot_enc, via_top_enc))
+ 
+            else:
+                xl_cap = bot_ext
+                xh_cap = xl_cap + width
+                yl_cap = bot_sp + cap_bound
+                yh_cap = yl_cap + height
+
+                xl_via = xl_cap + via_bnd
+                xh_via = xh_cap - via_bnd
+                yl_via = yl_cap + via_bnd
+                yh_via = yh_cap - via_bnd
+                builder.add_rect_arr(cap_lp, BBox(xl_cap, yl_cap, xh_cap, yh_cap))
+                builder.add_via(get_via_info(via_type, BBox(xl_via, yl_via, xh_via, yh_via),
+                                             via_dim, via_sp, via_bot_enc, via_top_enc))
+        
+            w_tot = bot_ext + width + top_ext
+            h_tot = bot_sp + 2 * cap_bound + height + cap_sp
+
+            pin_bot_yl = bot_sp
+            pin_bot_yh = height + 2 * cap_bound + bot_sp
+
+            pin_top_yl = bot_sp + cap_bound
+            pin_top_yh = bot_sp + height + cap_bound
+            pin_bot_xl = 0
+            pin_top_xh = w_tot
+
+            # set size
+            bnd_box = BBox(0, 0, w_tot, h_tot)
+        
+        return MIMLayInfo(builder.get_info(bnd_box), (pin_bot_yl, pin_bot_yh), (pin_top_yl, pin_top_yh),
+                          pin_bot_xl, pin_top_xh)
+     
+
+def get_via_info(via_type: str, box: BBox, via_dim: int, via_sp: int, bot_enc: int, top_enc: int) -> ViaInfo:
+    """Create vias over specified area."""
+    xc = (box.xl + box.xh) // 2
+    yc = (box.yl + box.yh) // 2
+
+    enc1 = (bot_enc, bot_enc, bot_enc, bot_enc)
+    enc2 = (top_enc, top_enc, top_enc, top_enc)
+
+    vnx = (box.xh - box.xl) // (via_dim + via_sp)
+    vny = (box.yh - box.yl) // (via_dim + via_sp)
+
+    nx = 1
+    ny = 1
+    return ViaInfo(via_type, xc, yc, via_dim, via_dim, enc1, enc2,
+                   vnx, vny, via_sp, via_sp, nx, ny, 0, 0)
+
+    # viaInfo needs
+    # via_type - via name
+    # xc: x coordinate center
+    # yc: y coordinate center
+    # w: via width
+    # h: via height
+    # enc1: Tuple[int, int, int, int] = (0, 0, 0, 0)
+    #       bottom layer via enclosure  
+    # enc2: Tuple[int, int, int, int] = (0, 0, 0, 0)
+    #       top layer via enclosure
+    # vnx: number of vias in x direction
+    # vny: number of vias in y direction
+    # vspx: via x spacing
+    # vspy: via y spacing
+    # nx: int = 1
+    # ny: int = 1
+    # spx: int = 0
+    # spy: int = 0
+ 
\ No newline at end of file
diff --git a/src/templates_skywater130/mos/__init__.py b/src/templates_skywater130/mos/__init__.py
old mode 100644
new mode 100755
index 7e4a026..6ae3ea6
--- a/src/templates_skywater130/mos/__init__.py
+++ b/src/templates_skywater130/mos/__init__.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/src/templates_skywater130/mos/tech.py b/src/templates_skywater130/mos/tech.py
old mode 100644
new mode 100755
index bf7d00c..bda9506
--- a/src/templates_skywater130/mos/tech.py
+++ b/src/templates_skywater130/mos/tech.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,15 +21,14 @@
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
 
-from typing import Tuple, Optional, FrozenSet, List, Mapping, Any
+
+from typing import Tuple, FrozenSet, List, Mapping, Any, Union, Optional
 
 from dataclasses import dataclass
-from itertools import chain
 
 from pybag.enum import Orient2D
-from pybag.core import COORD_MAX, BBox
+from pybag.core import BBox
 
-from bag.util.immutable import ImmutableSortedDict, ImmutableList, Param
 from bag.layout.tech import TechInfo
 from bag.layout.routing.grid import TrackSpec
 from bag.util.immutable import ImmutableSortedDict, ImmutableList, Param
@@ -94,56 +93,51 @@
 
 
 class MOSTechSkywater130(MOSTech):
-    ignore_vm_sp_le_layers: FrozenSet[str] = frozenset(('m1',))
+    ignore_vm_sp_le_layers: FrozenSet[str] = frozenset(('li1',))
 
     def __init__(self, tech_info: TechInfo, lch: int, arr_options: Mapping[str, Any]) -> None:
-        MOSTech.__init__(self, tech_info, lch, arr_options) 
+        MOSTech.__init__(self, tech_info, lch, arr_options)
+
+    @property
+    def can_draw_double_gate(self) -> bool:
+        return False
+
+    @property
+    def has_double_guard_ring(self) -> bool:
+        return True
 
     @property
     def blk_h_pitch(self) -> int:
-        return 2
+        return self.mos_config['blk_h_pitch']
 
     @property
     def end_h_min(self) -> int:
-        return self.mos_config['imp_h_min'] // 2
+        # return self.mos_config['imp_h_min'] // 2
+        end_margin: int = self.mos_config['end_margin']
+        return -(-end_margin//self.blk_h_pitch) * self.blk_h_pitch
 
     @property
     def min_sep_col(self) -> int:
-        #return self._get_od_sep_col(self.mos_config['od_spx'])
-
-        #felicia copied
-        lch = self.lch
         sd_pitch = self.sd_pitch
-        od_po_extx = self.od_po_extx
-
         od_spx: int = self.mos_config['od_spx']
         imp_od_encx: int = self.mos_config['imp_od_encx']
-        ans = -(-(od_spx + lch + 2 * od_po_extx + 2*imp_od_encx) // sd_pitch) - 1
-        return ans + (ans & 1)
+        imp_sp: int = self.mos_config['imp_same_sp']
+        od_sep = max(od_spx, imp_sp + 2 * imp_od_encx)
+        ans = -(-(od_sep + sd_pitch) // sd_pitch)
+
+        return ans  # This is not enforcing even col spacing for smallest possible spacing
 
     @property
     def sub_sep_col(self) -> int:
-        # column separation needed between transistor/substrate and substrate/substrate.
-        # This is guaranteed to be even.
-
-        #return self._get_od_sep_col(max(self.mos_config['od_spx'],
-        #                            2 * self.mos_config['imp_od_encx']))
-        
-        #felicia - copied method from cds_ff_mpt
-        #does something similar to _get_od_sep_col but seems to have 
-        #effective +1 that get_od doesn't have
-        lch = self.lch
         sd_pitch = self.sd_pitch
-        od_po_extx = self.od_po_extx
+        od_spx: int = self.mos_config['od_spx']
+        imp_od_encx: int = self.mos_config['imp_od_encx']
+        imp_sp: int = self.mos_config['imp_diff_sp']
+        od_sep = max(od_spx, imp_sp + 2 * imp_od_encx)
+        ans = -(-(od_sep + sd_pitch) // sd_pitch)
 
-        mos_config = self.mos_config
-        od_spx: int = mos_config['od_spx']
-        imp_od_encx: int = mos_config['imp_od_encx']
-
-        od_spx = max(od_spx, 2 * imp_od_encx)
-        ans = -(-(od_spx + lch + 2 * od_po_extx) // sd_pitch) - 1
         return ans + (ans & 1)
-        
+
     @property
     def min_sub_col(self) -> int:
         return self.min_od_col
@@ -173,7 +167,24 @@
     def well_w_edge(self) -> int:
         imp_od_encx: int = self.mos_config['imp_od_encx']
         nwell_imp: int = self.mos_config['nwell_imp']
-        return -(self.sd_pitch - self.lch) // 2 + self.od_po_extx + nwell_imp + imp_od_encx
+        well_w_edge = -(self.sd_pitch - self.lch) // 2 + self.od_po_extx + nwell_imp + imp_od_encx
+        return -(-well_w_edge // self.sd_pitch) * self.sd_pitch
+
+    def get_max_col_spacing_from_tap(self, pad_prox: bool = True) -> int:
+        """Gets maximum columns from nearest well tap rule.
+
+        Parameters
+        ----------
+        pad_prox:  Union[str, int, bool]
+            Proximity to signal pad to determine appropriate rule. Default True.
+            If True, cell is assumed close to pad diffusion. If False, cell is
+            assumed far from pad diffusion.
+        """
+        max_dist_tap_far = self.mos_config['latchup']['max_distance_from_tap__far']
+        max_dist_tap_near = self.mos_config['latchup']['max_distance_from_tap__near']
+        dist = max_dist_tap_near if pad_prox else max_dist_tap_far
+        col_dist = dist // self.sd_pitch
+        return col_dist
 
     def get_conn_info(self, conn_layer: int, is_gate: bool) -> ConnInfo:
         mconf = self.mos_config
@@ -182,40 +193,43 @@
         idx = conn_layer - wire_info['bot_layer']
         w, is_horiz, v_w, v_h, v_sp, v_bot_enc, v_top_enc = wire_info['info_list'][idx]
         orient = Orient2D(int(is_horiz ^ 1))
-        if conn_layer == 0:
-            sp_le = mconf['md_spy']
-            len_min = -(-mconf['md_area_min'] // w)
-        else:
-            tech_info = self.tech_info
-            lay, purp = tech_info.get_lay_purp_list(conn_layer)[0]
-            # make sure minimum length satisfies via enclosure rule
-            cur_len = 2 * v_top_enc + (v_w if is_horiz else v_h)
-            len_min = tech_info.get_next_length(lay, purp, orient, w, cur_len, even=True)
-            sp_le = tech_info.get_min_line_end_space(lay, w, purpose=purp, even=True)
+        tech_info = self.tech_info
+        lay, purp = tech_info.get_lay_purp_list(conn_layer)[0]
+        # make sure minimum length satisfies via enclosure rule
+        cur_len = 2 * v_top_enc + (v_w if is_horiz else v_h)
+        len_min = tech_info.get_next_length(lay, purp, orient, w, cur_len, even=True)
+        sp_le = tech_info.get_min_line_end_space(lay, w, purpose=purp, even=True)
 
         return ConnInfo(w, len_min, sp_le, orient, v_w, v_h, v_sp, v_bot_enc, v_top_enc)
 
+    # noinspection PyMethodMayBeStatic
     def can_short_adj_tracks(self, conn_layer: int) -> bool:
         return False
 
     def get_track_specs(self, conn_layer: int, top_layer: int) -> List[TrackSpec]:
-        assert conn_layer == 1, 'currently only work for conn_layer = 1'
-
-        sd_pitch = self.sd_pitch
+        assert conn_layer == 0, 'currently only work for conn_layer = 0'
 
         grid_info = self.mos_config['grid_info']
 
         return [TrackSpec(layer=lay, direction=Orient2D.y, width=vm_w,
-                          space=num_sd * sd_pitch - vm_w, offset=(num_sd * sd_pitch) // 2)
-                for lay, vm_w, num_sd in grid_info if conn_layer <= lay <= top_layer]
+                          space=vm_sp, offset=(num_sd * (vm_w + vm_sp)) // 2)
+                for lay, vm_w, vm_sp, num_sd in grid_info if conn_layer <= lay <= top_layer]
 
     def get_edge_width(self, mos_arr_width: int, blk_pitch: int) -> int:
-        w_edge_min = self.mos_config['imp_od_encx'] + self.sd_pitch // 2
-        return get_arr_edge_dim(mos_arr_width, w_edge_min, blk_pitch)
+        # w_edge_min = self.mos_config['imp_od_encx'] + self.sd_pitch // 2
+        # return = get_arr_edge_dim(mos_arr_width, w_edge_min, blk_pitch)
+        edge_margin: int = self.mos_config['edge_margin']
+        imp_od_encx: int = self.mos_config['imp_od_encx']
+        od_extx = self.od_po_extx - (self.sd_pitch - self.lch) // 2
+        num_sd = -(-(od_extx + imp_od_encx) // self.sd_pitch)
+        return -(-edge_margin // self.sd_pitch) * self.sd_pitch + num_sd * self.sd_pitch
 
     def get_mos_row_info(self, conn_layer: int, specs: MOSRowSpecs, bot_mos_type: MOSType,
                          top_mos_type: MOSType, global_options: Param) -> MOSRowInfo:
-        assert conn_layer == 1, 'currently only work for conn_layer = 1'
+        guard_ring: bool = specs.options.get('guard_ring', False)
+        guard_ring_col: bool = specs.options.get('guard_ring_col', False)
+
+        assert conn_layer == 0, 'currently only work for conn_layer = 0'
 
         blk_p = self.blk_h_pitch
 
@@ -238,40 +252,47 @@
         md_info = self.get_conn_info(0, False)
         od_vency = md_info.via_bot_enc
         md_top_vency = md_info.via_top_enc
+        md_vency = md_info.via_top_enc
+        md_spy = md_info.sp_le
+        md_h_min = md_info.len_min
+        v0_h = md_info.via_h
 
-        mg_info = self.get_conn_info(0, False)
-        mg_h = mg_info.w
-
-        m1_info = self.get_conn_info(1, False)
-        v0_h = m1_info.via_h
-        m1_h_min = m1_info.len_min
-        m1_spy = m1_info.sp_le
-        md_bot_vency = m1_info.via_bot_enc
-        m1_vency = m1_info.via_top_enc
+        if mos_type.is_substrate:
+            mg_h = 0
+        else:
+            mg_info = self.get_conn_info(0, True)
+            mg_h = mg_info.w
 
         po_yl = po_spy2
         po_yh_gate = po_yl + po_h_gate
-        po_yc_gate = (po_yl + po_yh_gate) // 2
-        gm1_yh = po_yc_gate + v0_h // 2 + m1_vency
-        gm1_yl = min(po_yc_gate - v0_h // 2 - m1_vency, gm1_yh - m1_h_min)
-        # fix mg_imp spacing
-        imp_yl = max(imp_h_min2, po_yc_gate + mg_h // 2 + mg_imp_spy)
-        od_yl = imp_yl + imp_od_ency
 
-        dm1_yl = gm1_yh + m1_spy
-        dv0_yl = dm1_yl + m1_vency
-        dmd_yl = dv0_yl - md_bot_vency
-        dvc_yl = dmd_yl + md_top_vency
-        od_yl = max(od_yl, dvc_yl - od_vency)
+        if mos_type.is_substrate:
+            od_yl = po_spy2 + po_od_exty
+        else:
+            po_yc_gate = (po_yl + po_yh_gate) // 2
+            gmd_yh = po_yc_gate + v0_h // 2 + md_vency
+            gmd_yl = min(po_yc_gate - v0_h // 2 - md_vency, gmd_yh - md_h_min)
+            # fix mg_imp spacing
+            imp_yl = max(imp_h_min2, po_yc_gate + mg_h // 2 + mg_imp_spy)
+            od_yl = imp_yl + imp_od_ency
+
+            dmd_yl = gmd_yh + md_spy
+            dvc_yl = dmd_yl + md_top_vency
+            od_yl = max(od_yl, dvc_yl - od_vency)
 
         od_yh = od_yl + w
         po_yh = od_yh + po_od_exty
         blk_yh = max(od_yh + imp_od_ency + imp_h_min2, po_yh + po_spy2)
-
         blk_yh = -(-blk_yh // blk_p) * blk_p
 
-        md_yl, md_yh, vc_num = self._get_conn_params(self.get_conn_info(0, False), od_yl, od_yh)
-        dm1_yl, dm1_yh, v0_num = self._get_conn_params(m1_info, md_yl, md_yh)
+        dmd_yl, dmd_yh, _ = self._get_conn_params(md_info, od_yl, od_yh)
+
+        if guard_ring:
+            dmd_yl = min(dmd_yl, od_yl)
+            dmd_yh = max(dmd_yh, od_yh)
+
+        if mos_type.is_substrate:
+            gmd_yl, gmd_yh = dmd_yl, dmd_yh
 
         # return MOSRowInfo
         top_einfo = RowExtInfo(
@@ -281,8 +302,10 @@
                 margins=dict(
                     od=(blk_yh - od_yh, od_spy),
                     po=(blk_yh - po_yh, po_spy),
-                    m1=(blk_yh - dm1_yh, m1_spy),
-                )
+                    md=(blk_yh - dmd_yh, md_spy),
+                ),
+                guard_ring=guard_ring,
+                guard_ring_col=guard_ring_col,
             )),
         )
         bot_einfo = RowExtInfo(
@@ -292,8 +315,10 @@
                 margins=dict(
                     od=(od_yl, od_spy),
                     po=(po_yl, po_spy),
-                    m1=(gm1_yl, m1_spy),
+                    md=(gmd_yl, md_spy),
                 ),
+                guard_ring=guard_ring,
+                guard_ring_col=guard_ring_col,
             )),
         )
         info = dict(
@@ -303,13 +328,18 @@
             po_y_gate=(po_yl, po_yh_gate),
         )
 
-        g_y = (gm1_yl, gm1_yh)
-        g_m_y = (0, po_yl)
-        ds_y = ds_g_y = sub_y = (dm1_yl, dm1_yh)
-        ds_m_y = (po_yh, blk_yh)
+        if mos_type.is_substrate:
+            g_y = ds_y = ds_g_y = sub_y = (dmd_yl, dmd_yh)
+            g_m_y = (0, po_yl)
+            ds_m_y = (po_yh, blk_yh)
+        else:
+            g_y = (gmd_yl, gmd_yh)
+            g_m_y = (0, po_yl)
+            ds_y = ds_g_y = sub_y = (dmd_yl, dmd_yh)
+            ds_m_y = (po_yh, blk_yh)
         return MOSRowInfo(self.lch, w, w_sub, mos_type, specs.threshold, blk_yh, specs.flip,
                           top_einfo, bot_einfo, ImmutableSortedDict(info), g_y, g_m_y, ds_y,
-                          ds_m_y, ds_g_y, sub_y, guard_ring=False)
+                          ds_m_y, ds_g_y, sub_y, guard_ring=guard_ring, guard_ring_col=guard_ring_col)
 
     def get_ext_width_info(self, bot_row_ext_info: RowExtInfo, top_row_ext_info: RowExtInfo,
                            ignore_vm_sp_le: bool = False) -> ExtWidthInfo:
@@ -329,9 +359,16 @@
 
         return ExtWidthInfo([], w_min)
 
+    # noinspection PyMethodMayBeStatic
     def get_extension_regions(self, bot_info: RowExtInfo, top_info: RowExtInfo, height: int
                               ) -> Tuple[MOSCutMode, int, int]:
-        if _get_extend_bot_implant(bot_info, top_info):
+        bot_gr = bot_info.info['guard_ring'] or bot_info.info['guard_ring_col']
+        top_gr = top_info.info['guard_ring'] or top_info.info['guard_ring_col']
+        if bot_gr and top_gr:
+            cut_mode = MOSCutMode.BOTH
+            bot_exty = 0
+            top_exty = 0
+        elif _get_extend_bot_implant(bot_info, top_info):
             # split at top
             cut_mode = MOSCutMode.TOP
             bot_exty = height
@@ -346,7 +383,7 @@
 
     def get_mos_conn_info(self, row_info: MOSRowInfo, conn_layer: int, seg: int, w: int, stack: int,
                           g_on_s: bool, options: Param) -> MOSLayInfo:
-        assert conn_layer == 1, 'currently only work for conn_layer = 1'
+        assert conn_layer == 0, 'currently only work for conn_layer = 0'
 
         sep_g = options.get('sep_g', False)
         export_mid = options.get('export_mid', False)
@@ -356,7 +393,6 @@
 
         height = row_info.height
         row_type = row_info.row_type
-        threshold = row_info.threshold
         imp_y: Tuple[int, int] = row_info['imp_y']
         po_y_gate: Tuple[int, int] = row_info['po_y_gate']
 
@@ -387,20 +423,18 @@
 
         # draw drain/source connections
         d0_info = self.get_conn_info(0, False)
-        d1_info = self.get_conn_info(1, False)
         md_yl, md_yh, num_vc = self._get_conn_params(d0_info, od_y[0], od_y[1])
-        num_v0 = self._get_conn_params(d1_info, md_yl, md_yh)[2]
         md_y = (md_yl, md_yh)
-        self._draw_ds_conn(builder, d0_info, d1_info, od_y, md_y, num_vc, num_v0,
+        self._draw_ds_conn(builder, d0_info, od_y, md_y, num_vc,
                            d_xc, num_d, conn_pitch)
-        self._draw_ds_conn(builder, d0_info, d1_info, od_y, md_y, num_vc, num_v0,
+        self._draw_ds_conn(builder, d0_info, od_y, md_y, num_vc,
                            s_xc, num_s, conn_pitch)
 
         if export_mid:
             m_xc = sd_pitch
             num_m = fg + 1 - num_s - num_d
             m_info = (m_xc, num_m, wire_pitch)
-            self._draw_ds_conn(builder, d0_info, d1_info, od_y, md_y, num_vc, num_v0,
+            self._draw_ds_conn(builder, d0_info, od_y, md_y, num_vc,
                                m_xc, num_m, wire_pitch)
         else:
             m_info = None
@@ -419,7 +453,6 @@
                      po_y_gate: Tuple[int, int], fg: int, conn_pitch: int, g_on_s: bool) -> None:
         lch = self.lch
         sd_pitch = self.sd_pitch
-        #breakpoint()
         mconf = self.mos_config
         npc_w: int = mconf['npc_w']
         npc_h: int = mconf['npc_h']
@@ -427,11 +460,8 @@
         npc_h2 = npc_h // 2
 
         g0_info = self.get_conn_info(0, True)
-        g1_info = self.get_conn_info(1, True)
 
-        po_lp = ('poly', 'drawing')
-        po_conn_w = sd_pitch + lch
-        po_xl_gate = g_xc - po_conn_w // 2
+        po_lp = self.tech_info.config['mos_lay_table']['PO']
 
         if g_on_s:
             g_xc = 0
@@ -448,44 +478,32 @@
             po_xl_odd = sd_pitch
             po_xh_odd = sd_pitch + sd_pitch // 2 + lch // 2
 
-        # builder.add_rect_arr(po_lp, BBox(po_xl_gate, po_y_gate[0], po_xl_gate + po_conn_w,
-                                         # po_y_gate[1]), nx=num_g, spx=conn_pitch)
         builder.add_rect_arr(po_lp, BBox(po_xl_even, po_y_gate[0], po_xh_even, po_y_gate[1]),
                              nx=(fg - (fg // 2)), spx=conn_pitch)
         builder.add_rect_arr(po_lp, BBox(po_xl_odd, po_y_gate[0], po_xh_odd, po_y_gate[1]),
                              nx=(fg // 2), spx=conn_pitch)
 
         po_yc_gate = (po_y_gate[0] + po_y_gate[1]) // 2
-        po_h_gate = po_y_gate[1] - po_y_gate[0]
+        po_h_gate = sd_pitch - lch
         builder.add_via(g0_info.get_via_info('PYL1_C', g_xc, po_yc_gate, po_h_gate,
                                              ortho=False, num=1, nx=num_g, spx=conn_pitch))
         # poly via draws npc layer wrong
         npc_box = BBox(g_xc - npc_w2, po_yc_gate - npc_h2, g_xc + npc_w2, po_yc_gate + npc_h2)
         builder.add_rect_arr(('npc', 'drawing'), npc_box, nx=num_g, spx=conn_pitch)
 
-        mp_h = g0_info.w
-        mp_w_min = g0_info.len_min
-        mp_lp = ('li1', 'drawing')
-        mp_yl = po_yc_gate - mp_h // 2
-        mp_yh = mp_yl + mp_h
+        po_w_min = g0_info.len_min
         if sep_g:
-            mp_xl = g_xc - mp_w_min // 2
-            builder.add_rect_arr(mp_lp, BBox(mp_xl, mp_yl, mp_xl + mp_w_min, mp_yh),
+            mp_xl = g_xc - po_w_min // 2
+            builder.add_rect_arr(po_lp, BBox(mp_xl, po_y_gate[0], mp_xl + po_w_min, po_y_gate[1]),
                                  nx=num_g, spx=conn_pitch)
         else:
-            mp_dx = g0_info.via_w # felicia - // 2 + g0_info.via_top_enc
-                                  # for licon.5
+            mp_dx = g0_info.via_w
             mp_xl = g_xc - mp_dx
             mp_xh = g_xc + (num_g - 1) * conn_pitch + mp_dx
-            builder.add_rect_arr(mp_lp, BBox(mp_xl, mp_yl, mp_xh, mp_yh))
+            builder.add_rect_arr(po_lp, BBox(mp_xl, po_y_gate[0], mp_xh, po_y_gate[1]))
 
-        # connect MP to M1
-        builder.add_via(g1_info.get_via_info('L1M1_C', g_xc, po_yc_gate, mp_h, ortho=True,
-                                             num=1, nx=num_g, spx=conn_pitch))
-
-    @staticmethod
-    def _draw_ds_conn(builder: LayoutInfoBuilder, d0_info: ConnInfo, d1_info: ConnInfo,
-                      od_y: Tuple[int, int], md_y: Tuple[int, int], num_vc: int, num_v0: int,
+    def _draw_ds_conn(self, builder: LayoutInfoBuilder, d0_info: ConnInfo,
+                      od_y: Tuple[int, int], md_y: Tuple[int, int], num_vc: int,
                       xc: int, nx: int, spx: int) -> None:
         # connect to MD
         md_w = d0_info.w
@@ -496,6 +514,7 @@
         vc_w2 = vc_w // 2
         vc_h2 = vc_h // 2
         md_w2 = md_w // 2
+        md_lp = self.tech_info.config['mos_lay_table']['MD']
 
         od_yc = (od_y[0] + od_y[1]) // 2
         vc_h_arr = num_vc * vc_p - vc_sp
@@ -503,10 +522,7 @@
         vc_box = BBox(xc - vc_w2, vc_yc_bot - vc_h2, xc + vc_w2, vc_yc_bot + vc_h2)
         md_box = BBox(xc - md_w2, md_y[0], xc + md_w2, md_y[1])
         builder.add_rect_arr(('licon1', 'drawing'), vc_box, nx=nx, spx=spx, ny=num_vc, spy=vc_p)
-        builder.add_rect_arr(('li1', 'drawing'), md_box, nx=nx, spx=spx)
-        # connect to M1
-        builder.add_via(d1_info.get_via_info('L1M1_C', xc, od_yc, md_w, ortho=False,
-                                             num=num_v0, nx=nx, spx=spx))
+        builder.add_rect_arr(md_lp, md_box, nx=nx, spx=spx)
 
     def get_mos_abut_info(self, row_info: MOSRowInfo, edgel: MOSEdgeInfo, edger: MOSEdgeInfo
                           ) -> LayoutInfo:
@@ -514,51 +530,41 @@
 
     def get_mos_tap_info(self, row_info: MOSRowInfo, conn_layer: int, seg: int,
                          options: Param) -> MOSLayInfo:
-        assert conn_layer == 1, 'currently only work for conn_layer = 1'
-        #print(row_info)
+        assert conn_layer == 0, 'currently only work for conn_layer = 0'
         row_type = row_info.row_type
 
         guard_ring: bool = options.get('guard_ring', row_info.guard_ring)
-        if guard_ring:
+        guard_ring_col: bool = options.get('guard_ring_col', row_info.guard_ring_col)
+        gr = guard_ring or guard_ring_col
+        if gr:
             sub_type: MOSType = options.get('sub_type', row_type.sub_type)
         else:
-            #print(row_type.sub_type)
             sub_type: MOSType = row_type.sub_type
 
-        sd_pitch = self.sd_pitch
+        sd_pitch: int = self.sd_pitch
 
-        w = row_info.sub_width
-        height = row_info.height
-        threshold = row_info.threshold
+        w: int = row_info.sub_width
+        height: int = row_info.height
         imp_y: Tuple[int, int] = row_info['imp_y']
 
         # draw device
         builder = LayoutInfoBuilder()
-        #draws diffusion and tap
-        #if (row_type is MOSType.nch):
-        od_y = self._add_mos_active(builder, row_info, 0, seg, w, is_sub=True)
-        #print(row_info)
-        #else:
-        #    od_y = (193, 303)
+        # draws diffusion and tap
+        od_y = self._add_mos_active(builder, row_info, 0, seg, w, is_sub=True, sub_type=sub_type)
+
         # draw drain/source connections
         d0_info = self.get_conn_info(0, False)
-        d1_info = self.get_conn_info(1, False)
         md_yl, md_yh, num_vc = self._get_conn_params(d0_info, od_y[0], od_y[1])
-        num_v0 = self._get_conn_params(d1_info, md_yl, md_yh)[2]
         md_y = (md_yl, md_yh)
+        if guard_ring:
+            md_y = row_info.ds_conn_y
 
-        #draws in vias connecting tap cell to metal 1
-        self._draw_ds_conn(builder, d0_info, d1_info, od_y, md_y, num_vc, num_v0,
-                           0, seg + 1, sd_pitch)
+        # draws in vias connecting tap cell to metal 1
+        self._draw_ds_conn(builder, d0_info, od_y, md_y, num_vc, 0, seg + 1, sd_pitch)
 
-        # draw base
-        # add extra imp)od_encx for ntap and ptap
-        imp_od_encx: int = self.mos_config['imp_od_encx']
-        bbox = BBox(0-2*imp_od_encx, 0, seg * sd_pitch + 2*imp_od_encx, height)
-        add_base_mos(builder, sub_type, threshold, imp_y, bbox, is_sub=True)
-        
+        bbox = BBox(0, 0, seg * sd_pitch, height)
         edge_info = MOSEdgeInfo(mos_type=sub_type, imp_y=imp_y, has_od=True)
-        be = BlkExtInfo(row_type, row_info.threshold, guard_ring, ImmutableList([(seg, sub_type)]),
+        be = BlkExtInfo(row_type, row_info.threshold, gr, ImmutableList([(seg, sub_type)]),
                         ImmutableSortedDict())
         wire_info = (0, seg + 1, sd_pitch)
         return MOSLayInfo(builder.get_info(bbox), edge_info, edge_info, be, be,
@@ -595,6 +601,8 @@
         else:
             typel = typer = row_type
 
+        guard_ring = row_info.guard_ring or row_info.guard_ring_col
+
         builder = LayoutInfoBuilder()
 
         # find dummy OD columns
@@ -603,6 +611,9 @@
         delta_implant = -(-delta_implant // sd_pitch) * sd_pitch
         if typel == typer:
             # same implant on left and right
+            if guard_ring and typel.is_substrate:
+                raise ValueError('Cannot have empty spaces between guard ring edges.')
+
             be = BlkExtInfo(row_type, threshold, False, ImmutableList([(num_cols, typel)]),
                             ImmutableSortedDict())
             add_base(builder, typel, threshold, imp_y, bbox)
@@ -650,7 +661,7 @@
             if fgr > 0:
                 fg_dev_list.append((fgr, typer))
 
-            be = BlkExtInfo(row_type, threshold, False, ImmutableList(fg_dev_list),
+            be = BlkExtInfo(row_type, threshold, guard_ring, ImmutableList(fg_dev_list),
                             ImmutableSortedDict())
             edgel = MOSEdgeInfo(mos_type=typel, imp_y=imp_y, has_od=False)
             edger = edgel.copy_with(mos_type=typer)
@@ -661,12 +672,56 @@
 
     def get_mos_ext_info(self, num_cols: int, blk_h: int, bot_einfo: RowExtInfo,
                          top_einfo: RowExtInfo, gr_info: Tuple[int, int]) -> ExtEndLayInfo:
-        raise ValueError('Not implemented.')
+        if _get_extend_bot_implant(bot_einfo, top_einfo):
+            row_type = bot_einfo.row_type
+            threshold = bot_einfo.threshold
+        else:
+            row_type = top_einfo.row_type
+            threshold = top_einfo.threshold
+        return self._get_mos_ext_info_helper(num_cols, blk_h, row_type, threshold)
 
     def get_mos_ext_gr_info(self, num_cols: int, edge_cols: int, blk_h: int, bot_einfo: RowExtInfo,
                             top_einfo: RowExtInfo, sub_type: MOSType, einfo: MOSEdgeInfo
                             ) -> ExtEndLayInfo:
-        raise ValueError('Not implemented.')
+        if _get_extend_bot_implant(bot_einfo, top_einfo):
+            threshold = bot_einfo.threshold
+        else:
+            threshold = top_einfo.threshold
+        return self._get_mos_ext_info_helper(num_cols, blk_h, sub_type, threshold, guard_ring=True)
+
+    def _get_mos_ext_info_helper(self, num_cols: int, blk_h: int, row_type: MOSType, threshold: str,
+                                 guard_ring: bool = False) -> ExtEndLayInfo:
+        sd_pitch = self.sd_pitch
+
+        blk_w = num_cols * sd_pitch
+        blk_rect = BBox(0, 0, blk_w, blk_h)
+
+        builder = LayoutInfoBuilder()
+
+        if guard_ring:
+            md_info = self.get_conn_info(0, False)
+            v_w = md_info.via_w
+            od_tap_extx = self.mos_config['od_tap_extx']  # determines the amount to extend material from licon
+            od_sd_dx = od_tap_extx + v_w // 2
+
+            od_lp = self.tech_info.config['mos_lay_table']['OD']['sub']
+            md_lp = self.tech_info.config['mos_lay_table']['MD']
+            od_xl = - od_sd_dx
+            od_xr = sd_pitch * (num_cols - 1) + od_sd_dx
+            builder.add_rect_arr(od_lp, BBox(od_xl, 0, od_xr, blk_h))
+            builder.add_rect_arr(md_lp, BBox(od_xl, 0, od_xr, blk_h))
+            blk_xl = od_xl - (blk_w - od_xr)
+            blk_rect = BBox(blk_xl, 0, blk_w, blk_h)
+            imp_y = (0, blk_h)
+            imp_od_encx: int = self.mos_config['imp_od_encx']
+            add_base_mos(builder, row_type, threshold, imp_y, blk_rect,
+                         imp_x=(od_xl - imp_od_encx, od_xr + imp_od_encx), is_sub=row_type.is_substrate)
+        else:
+            imp_y = (0, 0)
+            add_base(builder, row_type, threshold, imp_y, blk_rect)
+
+        edge_info = MOSEdgeInfo(blk_h=blk_h, row_type=row_type, mos_type=row_type, threshold=threshold, imp_y=imp_y)
+        return ExtEndLayInfo(builder.get_info(blk_rect), edge_info)
 
     def get_ext_geometries(self, re_bot: RowExtInfo, re_top: RowExtInfo,
                            be_bot: ImmutableList[BlkExtInfo], be_top: ImmutableList[BlkExtInfo],
@@ -766,59 +821,88 @@
         return -(-(spx + lch + 2 * od_po_extx) // sd_pitch) - 1
 
     def _add_mos_active(self, builder: LayoutInfoBuilder, row_info: MOSRowInfo,
-                        start: int, stop: int, w: int, is_sub: bool = False
+                        start: int, stop: int, w: int, is_sub: bool = False, sub_type: Optional[MOSType] = None
                         ) -> Tuple[int, int]:
         po_yl: int = row_info['po_y'][0]
         od_yl: int = row_info['od_y'][0]
+        guard_ring: bool = row_info.guard_ring
+        guard_ring_col: bool = row_info.guard_ring_col
+        blk_yh: int = row_info.height
 
-        lch = self.lch
         sd_pitch = self.sd_pitch
-        od_po_extx = self.od_po_extx
 
         mconf = self.mos_config
         po_h_min: int = mconf['po_h_min']
         po_od_exty: int = mconf['po_od_exty']
 
+        md_info = self.get_conn_info(0, False)
+        v_w = md_info.via_w
+
         # draw PO
         od_yh = od_yl + w
         if is_sub:
-            od_lp = ('tap', 'drawing')
+            od_lp = self.tech_info.config['mos_lay_table']['OD']['sub']
+            od_tap_extx = mconf['od_tap_extx']  # determines the amount to extend material from licon
+            od_sd_dx = od_tap_extx + v_w // 2
         else:
-            od_lp = ('diff', 'drawing')
+            od_lp = self.tech_info.config['mos_lay_table']['OD']['active']
             po_y = (po_yl, max(po_yl + po_h_min, od_yh + po_od_exty))
             self._add_po_array(builder, po_y, start, stop)
+            od_sd_dx = sd_pitch // 2
 
         # draw OD
-        po_xl = (sd_pitch - lch) // 2
-        od_sd_dx = od_po_extx - po_xl
         od_xl = start * sd_pitch - od_sd_dx
         od_xh = stop * sd_pitch + od_sd_dx
         builder.add_rect_arr(od_lp, BBox(od_xl, od_yl, od_xh, od_yh))
+        imp_y = row_info['imp_y']
+        if is_sub:
+            md_lp = self.tech_info.config['mos_lay_table']['MD']
+            if guard_ring and stop - start > self.gr_edge_col:
+                if sub_type.is_n_plus:
+                    imp_lp = ('nsdm', 'drawing')
+                else:
+                    imp_lp = ('psdm', 'drawing')
+                imp_od_encx: int = mconf['imp_od_encx']
+                md_y = row_info.ds_conn_y
+                # OD, implant, li1 for left small rectangle
+                od_xh2 = start * sd_pitch + self.gr_edge_col * sd_pitch + od_sd_dx
+                builder.add_rect_arr(od_lp, BBox(od_xl, od_yh, od_xh2, blk_yh))
+                builder.add_rect_arr(imp_lp, BBox(od_xl - imp_od_encx, od_yh, od_xh2 + imp_od_encx, blk_yh))
+                builder.add_rect_arr(md_lp, BBox(od_xl, od_yh, od_xh2, blk_yh))
+                od_xl2 = stop * sd_pitch - self.gr_edge_col * sd_pitch - od_sd_dx
+                # OD, implant, li1 for right small rectangle
+                builder.add_rect_arr(od_lp, BBox(od_xl2, od_yh, od_xh, blk_yh))
+                builder.add_rect_arr(imp_lp, BBox(od_xl2 - imp_od_encx, od_yh, od_xh + imp_od_encx, blk_yh))
+                builder.add_rect_arr(md_lp, BBox(od_xl2, od_yh, od_xh, blk_yh))
+                # li1 for main OD
+                builder.add_rect_arr(md_lp, BBox(od_xl, md_y[0], od_xh, md_y[1]))
+            if guard_ring_col and stop - start == self.gr_edge_col:
+                # OD, implant, li1 for entire height
+                builder.add_rect_arr(od_lp, BBox(od_xl, 0, od_xh, blk_yh))
+                builder.add_rect_arr(md_lp, BBox(od_xl, 0, od_xh, blk_yh))
+                imp_y = (0, blk_yh)
 
         # draw base
         imp_od_encx: int = self.mos_config['imp_od_encx']
-        bbox = BBox(od_xl-imp_od_encx, 0, od_xh+imp_od_encx, row_info.height)
-        
-        #if drawing tap cells, flip the implant type so its opposite of row
+        bbox = BBox(od_xl-imp_od_encx, 0, od_xh+imp_od_encx, blk_yh)
+
         if is_sub:
-            if (row_info.row_type is MOSType.nch):
-                add_base_mos(builder, MOSType.pch, row_info.threshold, row_info['imp_y'], bbox, is_sub=True)
-            elif (row_info.row_type is MOSType.pch):
-                add_base_mos(builder, MOSType.nch, row_info.threshold, row_info['imp_y'], bbox, is_sub=True)
-        else:    
-            add_base_mos(builder, row_info.row_type, row_info.threshold, row_info['imp_y'], bbox)
+            mos_type = sub_type
+        else:
+            mos_type = row_info.row_type
+        add_base_mos(builder, mos_type, row_info.threshold, imp_y, bbox, is_sub=is_sub)
 
         return od_yl, od_yh
 
     def _add_po_array(self, builder: LayoutInfoBuilder, po_y: Tuple[int, int], start: int,
                       stop: int) -> None:
+        po_lp = self.tech_info.config['mos_lay_table']['PO']
         lch = self.lch
         sd_pitch = self.sd_pitch
-
         po_x0 = (sd_pitch - lch) // 2 + sd_pitch * start
         fg = stop - start
         if po_y[1] > po_y[0]:
-            builder.add_rect_arr(('poly', 'drawing'), BBox(po_x0, po_y[0], po_x0 + lch, po_y[1]),
+            builder.add_rect_arr(po_lp, BBox(po_x0, po_y[0], po_x0 + lch, po_y[1]),
                                  nx=fg, spx=sd_pitch)
 
     def _edge_info_helper(self, blk_w: int, blk_h: int, row_type: MOSType, threshold: str,
diff --git a/src/templates_skywater130/res/__init__.py b/src/templates_skywater130/res/__init__.py
new file mode 100755
index 0000000..6ae3ea6
--- /dev/null
+++ b/src/templates_skywater130/res/__init__.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# 
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
diff --git a/src/templates_skywater130/res/tech.py b/src/templates_skywater130/res/tech.py
new file mode 100644
index 0000000..f794f94
--- /dev/null
+++ b/src/templates_skywater130/res/tech.py
@@ -0,0 +1,231 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# 
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
+from typing import Any, Optional, List, Tuple, Sequence, Mapping
+
+from pybag.enum import Orient2D
+from pybag.core import BBox
+
+from bag.util.immutable import ImmutableSortedDict, Param
+from bag.layout.routing.grid import TrackSpec
+from bag.layout.tech import TechInfo
+
+from xbase.layout.data import LayoutInfo, LayoutInfoBuilder, CornerLayInfo, ViaInfo
+from xbase.layout.array.data import ArrayLayInfo, ArrayEndInfo
+from xbase.layout.res.tech import ResTech
+
+
+class ResTechSkywater130(ResTech):
+    """Resistor class for SkyWater130
+    """
+    def __init__(self, tech_info: TechInfo, metal: bool = False) -> None:
+        ResTech.__init__(self, tech_info, metal=metal)
+        if metal:
+            raise RuntimeError("Metal resistors currently not supported")
+
+    def get_width(self, **kwargs) -> int:
+        if "unit_specs" not in kwargs:
+            raise RuntimeError("Please add unit_specs")
+        w_unit: int = kwargs['unit_specs']['params']['w']
+        w_min: int = self._res_config['w_min']
+        if w_unit < w_min:
+            raise ValueError(f'w={w_unit} has to be greater than or equal to w_min={w_min}.')
+        return w_unit
+
+    def get_length(self, **kwargs) -> int:
+        if "unit_specs" not in kwargs:
+            raise RuntimeError("Please add unit_specs")
+        l_unit: int = kwargs['unit_specs']['params']['l']
+        l_min: int = self._res_config['l_min']
+        if l_unit < l_min:
+            raise ValueError(f'l={l_unit} has to be greater than or equal to l_min={l_min}.')
+        return l_unit
+
+    @property
+    def min_size(self) -> Tuple[int, int]:
+        return self._res_config['min_size']
+
+    @property
+    def blk_pitch(self) -> Tuple[int, int]:
+        return self._res_config['blk_pitch']
+
+    def get_track_specs(self, conn_layer: int, top_layer: int) -> List[TrackSpec]:
+        grid_info: Sequence[Tuple[int, int, int]] = self._res_config['grid_info']
+
+        return [TrackSpec(layer=lay, direction=Orient2D.y, width=vm_w, space=vm_sp, offset=(vm_w + vm_sp) // 2)
+                for lay, vm_w, vm_sp in grid_info if conn_layer < lay <= top_layer]
+
+    def get_edge_width(self, info: ImmutableSortedDict[str, Any], arr_dim: int, blk_pitch: int) -> int:
+        edge_margin: int = self._res_config['edge_margin']
+        return -(- edge_margin // blk_pitch) * blk_pitch
+
+    def get_end_height(self, info: ImmutableSortedDict[str, Any], arr_dim: int, blk_pitch: int) -> int:
+        end_margin: int = self._res_config['end_margin']
+        return -(- end_margin // blk_pitch) * blk_pitch
+
+    def get_blk_info(self, conn_layer: int, w: int, h: int, nx: int, ny: int, **kwargs: Any) -> Optional[ArrayLayInfo]:
+        po_id_exty: int = self._res_config['po_id_exty']
+        npc_po_enc: int = self._res_config['npc_po_enc']
+        imp_npc_enc: Tuple[int, int] = self._res_config['imp_npc_enc']
+        tap_imp_h: int = self._res_config['tap_imp_h']
+        rlay_npc_enc: int = self._res_config['rlay_npc_enc']
+        npc_sp: int = self._res_config['npc_sp']
+
+        tap_imp_h2 = tap_imp_h // 2
+
+        # unit resistor dimensions
+        w_unit = self.get_width(**kwargs)
+        l_unit = self.get_length(**kwargs)
+
+        w_pitch, h_pitch = self.blk_pitch
+        w_blk = -(-(w_unit + 2 * (npc_po_enc + max(rlay_npc_enc, npc_sp // 2))) // w_pitch) * w_pitch
+        h_blk = -(-(l_unit + 2 * (po_id_exty + npc_po_enc + imp_npc_enc[1] + tap_imp_h2)) // h_pitch) * h_pitch
+        if w < w_blk or h < h_blk:
+            return None
+
+        res_lay_table = self._tech_info.config['res_lay_table']
+
+        # --- Compute layout --- #
+        top_bbox = BBox(0, 0, w, h)
+        builder = LayoutInfoBuilder()
+
+        # draw ID layer in the center
+        w2 = w // 2
+        h2 = h // 2
+        w_unit2 = w_unit // 2
+        l_unit2 = l_unit // 2
+        id_lp = res_lay_table['ID']
+        builder.add_rect_arr(id_lp, BBox(w2 - w_unit2, h2 - l_unit2, w2 + w_unit2, h2 + l_unit2))
+
+        # draw cut layer
+        cut_lp = res_lay_table['CUT']
+        builder.add_rect_arr(cut_lp, BBox(w2 - w_unit2, h2, w2 + w_unit2, h2 + 1))
+
+        # draw poly: same width as ID layer, height extends beyond ID layer
+        po_lp = res_lay_table['PO']
+        builder.add_rect_arr(po_lp, BBox(w2 - w_unit2, h2 - l_unit2 - po_id_exty,
+                                         w2 + w_unit2, h2 + l_unit2 + po_id_exty))
+
+        # draw npc enclosing poly
+        npc_lp = res_lay_table['NPC']
+        builder.add_rect_arr(npc_lp, BBox(w2 - w_unit2 - npc_po_enc, h2 - l_unit2 - po_id_exty - npc_po_enc,
+                                          w2 + w_unit2 + npc_po_enc, h2 + l_unit2 + po_id_exty + npc_po_enc))
+
+        # draw resistor layer: span entire width, extend beyond npc in height
+        res_type: str = kwargs['unit_specs']['params']['res_type']
+        r_lp = self._res_config['rlay'][res_type]
+        builder.add_rect_arr(r_lp, BBox(0, h2 - l_unit2 - po_id_exty - npc_po_enc - rlay_npc_enc,
+                                        w, h2 + l_unit2 + po_id_exty + npc_po_enc + rlay_npc_enc))
+
+        # draw implant layer extending beyond taps on top and bottom
+        imp_lp = res_lay_table['IMP']
+        builder.add_rect_arr(imp_lp, BBox(0, - tap_imp_h2, w, h + tap_imp_h2))
+
+        # add bottom tap
+        tap_h: int = self._res_config['tap_h']
+        tap_h2 = tap_h // 2
+        od_lp = res_lay_table['OD_sub']
+        tap_via_specs: Mapping[str, Any] = self._res_config['tap_via_specs']
+        tap_via_name: str = tap_via_specs['name']
+        tap_via_w, tap_via_h = tap_via_specs['dim']
+        tap_via_bot_enc: Tuple[int, int] = tap_via_specs['bot_enc']
+        tap_via_top_enc: Tuple[int, int] = tap_via_specs['top_enc']
+        tap_via_spx: int = tap_via_specs['spx']
+        tap_via_benc = (tap_via_bot_enc[0], tap_via_bot_enc[0], tap_via_bot_enc[1], tap_via_bot_enc[1])
+        tap_via_tenc = (tap_via_top_enc[0], tap_via_top_enc[0], tap_via_top_enc[1], tap_via_top_enc[1])
+        tap_vnx = (w_unit - 2 * tap_via_bot_enc[0] + tap_via_spx) // (tap_via_w + tap_via_spx)
+        tap_via_tot_w = tap_via_w * tap_vnx + tap_via_spx * (tap_vnx - 1)
+        builder.add_rect_arr(od_lp, BBox(w2 - w_unit2, - tap_h2, w2 + w_unit2, tap_h2))
+        builder.add_via(ViaInfo(tap_via_name, w2, 0, tap_via_w, tap_via_h, tap_via_benc, tap_via_tenc, tap_vnx, 1,
+                                tap_via_spx))
+
+        # add top tap
+        builder.add_rect_arr(od_lp, BBox(w2 - w_unit2, h - tap_h2, w2 + w_unit2, h + tap_h2))
+        builder.add_via(ViaInfo(tap_via_name, w2, h, tap_via_w, tap_via_h, tap_via_benc, tap_via_tenc, tap_vnx, 1,
+                                tap_via_spx))
+
+        # vias to conn_layer ports
+        po_via_specs: Mapping[str, Any] = self._res_config['po_via_specs']
+        po_via_name: str = po_via_specs['name']
+        po_via_w, po_via_h = po_via_specs['dim']
+        po_via_bot_enc: Tuple[int, int] = po_via_specs['bot_enc']
+        po_via_top_enc: Tuple[int, int] = po_via_specs['top_enc']
+        po_via_spx: int = po_via_specs['spx']
+        po_via_benc = (po_via_bot_enc[0], po_via_bot_enc[0], po_via_bot_enc[1], po_via_bot_enc[1])
+        po_via_tenc = (po_via_top_enc[0], po_via_top_enc[0], po_via_top_enc[1], po_via_top_enc[1])
+        po_vnx = (w_unit - 2 * po_via_bot_enc[0] + po_via_spx) // (po_via_w + po_via_spx)
+        po_via_tot_w = po_via_w * po_vnx + po_via_spx * (po_vnx - 1)
+        builder.add_via(ViaInfo(po_via_name, w2, h2 - l_unit2 - po_via_h // 2, po_via_w, po_via_h, po_via_benc,
+                                po_via_tenc, po_vnx, 1, po_via_spx))
+        builder.add_via(ViaInfo(po_via_name, w2, h2 + l_unit2 + po_via_h // 2, po_via_w, po_via_h, po_via_benc,
+                                po_via_tenc, po_vnx, 1, po_via_spx))
+
+        # ports on conn_layer
+        conn_lp = self._tech_info.get_lay_purp_list(self.conn_layer)[0]
+        minus_bbox = BBox(w2 - po_via_tot_w // 2 - po_via_top_enc[0], h2 - l_unit2 - po_via_h - po_via_top_enc[1],
+                          w2 + po_via_tot_w // 2 + po_via_top_enc[0], h2 - l_unit2 + po_via_top_enc[1])
+        builder.add_rect_arr(conn_lp, minus_bbox)
+
+        plus_bbox = BBox(w2 - po_via_tot_w // 2 - po_via_top_enc[0], h2 + l_unit2 - po_via_top_enc[1],
+                         w2 + po_via_tot_w // 2 + po_via_top_enc[0], h2 + l_unit2 + po_via_h + po_via_top_enc[1])
+        builder.add_rect_arr(conn_lp, plus_bbox)
+
+        tap_via_h2 = tap_via_h // 2
+        tap_via_tot_w2 = tap_via_tot_w // 2
+        bulk0_bbox = BBox(w2 - tap_via_tot_w2 - tap_via_top_enc[0], - tap_via_h2 - tap_via_top_enc[1],
+                          w2 + tap_via_tot_w2 + tap_via_top_enc[0], tap_via_h2 + tap_via_top_enc[1])
+        builder.add_rect_arr(conn_lp, bulk0_bbox)
+        bulk1_bbox = BBox(w2 - tap_via_tot_w2 - tap_via_top_enc[0], h - tap_via_h2 - tap_via_top_enc[1],
+                          w2 + tap_via_tot_w2 + tap_via_top_enc[0], h + tap_via_h2 + tap_via_top_enc[1])
+        builder.add_rect_arr(conn_lp, bulk1_bbox)
+
+        ports = dict(MINUS=[(conn_lp[0], [minus_bbox])], PLUS=[(conn_lp[0], [plus_bbox])],
+                     BULK=[(conn_lp[0], [bulk0_bbox, bulk1_bbox])])
+
+        lay_info = builder.get_info(top_bbox)
+        edge_info = Param(dict(od_margin=0))
+        end_info = Param(dict(od_margin=0))
+        ports = Param(ports)
+        return ArrayLayInfo(lay_info, ports, edge_info, end_info)
+
+    # noinspection PyMethodMayBeStatic
+    def get_edge_info(self, w: int, h: int, info: ImmutableSortedDict[str, Any], **kwargs: Any) -> LayoutInfo:
+        builder = LayoutInfoBuilder()
+        blk_bbox = BBox(0, 0, w, h)
+        return builder.get_info(blk_bbox)
+
+    # noinspection PyMethodMayBeStatic
+    def get_end_info(self, w: int, h: int, info: ImmutableSortedDict[str, Any], **kwargs: Any) -> ArrayEndInfo:
+        builder = LayoutInfoBuilder()
+        blk_bbox = BBox(0, 0, w, h)
+        return ArrayEndInfo(builder.get_info(blk_bbox), ImmutableSortedDict())
+
+    # noinspection PyMethodMayBeStatic
+    def get_corner_info(self, w: int, h: int, info: ImmutableSortedDict[str, Any], **kwargs: Any) -> CornerLayInfo:
+        x_margins = dict(well=0, base=0)
+        y_margins = dict(well=0, base=0)
+        edgel = Param(dict(margins=x_margins))
+        edgeb = Param(dict(margins=y_margins))
+        builder = LayoutInfoBuilder()
+        blk_bbox = BBox(0, 0, w, h)
+        return CornerLayInfo(builder.get_info(blk_bbox), (0, 0), edgel, edgeb)
diff --git a/src/templates_skywater130/tech.py b/src/templates_skywater130/tech.py
old mode 100644
new mode 100755
index 8f7d3d0..ae5cb54
--- a/src/templates_skywater130/tech.py
+++ b/src/templates_skywater130/tech.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,6 +21,7 @@
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
 
+
 from typing import Tuple, Optional, Mapping
 
 from pybag.core import BBox
@@ -34,8 +35,9 @@
 from . import config as _config
 from . import config_fname as _config_fname
 from .mos.tech import MOSTechSkywater130
+from .mim.tech import MIMTechSkywater130
 # from .fill.tech import FillTechSkywater130
-# from .res.tech import ResTechSkywater130
+from .res.tech import ResTechSkywater130
 
 
 class TechInfoSkywater130(TechInfo):
@@ -43,8 +45,9 @@
         TechInfo.__init__(self, process_params, _config, _config_fname)
 
         self.register_device_tech('mos', MOSTechSkywater130)
-        # self.register_device_tech('fill', FillTechCDSFFMPT)
-        # self.register_device_tech('res', ResTechCDSFFMPT)
+        self.register_device_tech('mim', MIMTechSkywater130)
+        self.register_device_tech('res', ResTechSkywater130)
+        # self.register_device_tech('fill', FillTechSkywater130)
 
     def get_margin(self, is_vertical: bool, edge1: Param, edge2: Optional[Param]) -> int:
         if edge2 is None:
diff --git a/src/templates_skywater130/util.py b/src/templates_skywater130/util.py
old mode 100644
new mode 100755
index 39e0e6d..9d19f4f
--- a/src/templates_skywater130/util.py
+++ b/src/templates_skywater130/util.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,6 +21,7 @@
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
 
+
 from typing import Optional, Tuple
 
 from pybag.core import BBox
@@ -34,7 +35,6 @@
     # draws nwell, n+ implant (ndsm) and p+ implant (pdsm)
     # for non mos devices (corners, edges, etc)
 
-    pimp_lp = ('psdm', 'drawing')
     if rect.is_physical():
         if not row_type.is_pwell:
             well_lp = ('nwell', 'drawing')
@@ -46,32 +46,31 @@
         thres_lp = _get_thres_lp(row_type, threshold)
         if thres_lp[0] != '':
             builder.add_rect_arr(thres_lp, rect)
-    
-def add_base_mos(builder: LayoutInfoBuilder, row_type: MOSType, threshold: str, imp_y: Tuple[int, int],
-             rect: BBox, well_x: Optional[Tuple[int, int]] = None, is_sub: bool = False) -> None:
-    # new func draws nwell, n+ implant (ndsm) and p+ implant (pdsm)
-    
-    pimp_lp = ('psdm', 'drawing')
 
+
+def add_base_mos(builder: LayoutInfoBuilder, row_type: MOSType, threshold: str, imp_y: Tuple[int, int],
+                 rect: BBox, well_x: Optional[Tuple[int, int]] = None, imp_x: Optional[Tuple[int, int]] = None,
+                 is_sub: bool = False) -> None:
+    # new func draws nwell, n+ implant (ndsm) and p+ implant (pdsm)
     if rect.is_physical():
         # only draw nwells if not a tap cell and pch, or is tap cell and nch
-        if ((not row_type.is_pwell) and (not is_sub)) \
-                or (is_sub and (row_type is MOSType.nch or row_type is MOSType.ntap) ):
+        if (not row_type.is_pwell and not is_sub) or (is_sub and row_type.is_n_plus):
             well_lp = ('nwell', 'drawing')
             if well_x is None:
                 builder.add_rect_arr(well_lp, rect)
             else:
                 builder.add_rect_arr(well_lp, BBox(well_x[0], rect.yl, well_x[1], rect.yh))
             
-        #draw the respective implant called    
-        if (row_type is MOSType.nch):
-            builder.add_rect_arr(('nsdm', 'drawing'),  BBox(rect.xl, imp_y[0], rect.xh, imp_y[1]))
-        elif (row_type is MOSType.pch):
-            builder.add_rect_arr(('psdm', 'drawing'),  BBox(rect.xl, imp_y[0], rect.xh, imp_y[1]))
-        elif (row_type is MOSType.ntap):
-            builder.add_rect_arr(('nsdm', 'drawing'),  BBox(rect.xl, imp_y[0], rect.xh, imp_y[1]))
-        elif (row_type is MOSType.ptap):
-            builder.add_rect_arr(('psdm', 'drawing'),  BBox(rect.xl, imp_y[0], rect.xh, imp_y[1]))
+        # draw the respective implant
+        if row_type.is_n_plus:
+            imp_lp = ('nsdm', 'drawing')
+        else:
+            imp_lp = ('psdm', 'drawing')
+        if imp_x is None:
+            imp_bbox = BBox(rect.xl, imp_y[0], rect.xh, imp_y[1])
+        else:
+            imp_bbox = BBox(imp_x[0], imp_y[0], imp_x[1], imp_y[1])
+        builder.add_rect_arr(imp_lp,  imp_bbox)
 
         thres_lp = _get_thres_lp(row_type, threshold)
         if thres_lp[0] != '':
diff --git a/tech_config.yaml b/tech_config.yaml
index 1f7b5a2..f1aedb0 100644
--- a/tech_config.yaml
+++ b/tech_config.yaml
@@ -17,7 +17,6 @@
 # https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
-
 # the Technology class.
 class: "templates_skywater130.tech.TechInfoSkywater130"
 
@@ -37,11 +36,12 @@
 
 # routing grid parameters
 routing_grid:
-  1: [y, 52,  34]
-  2: [x, 56,  70]
-  3: [y, 66,  106]
-  4: [x, 66,  60]
-  5: [y, 284, 232]
+  0: [y, 34,  52]
+  1: [x, 58,  28]
+  2: [y, 56,  30]
+  3: [x, 66,  106]
+  4: [y, 66,  106]
+  5: [x, 320, 368]
 
 # MOM cap parameters
 mom_cap:
@@ -49,14 +49,11 @@
     bot_dir: x
     info:
       # w, sp, margin, num_ports, port_tr_w
-      1: !!python/tuple [64, 64, 120, 2, 1]
-      2: !!python/tuple [64, 64, 120, 2, 1]
-      3: !!python/tuple [64, 64, 120, 2, 1]
-      4: !!python/tuple [64, 96, 96, 1, 1]
-      5: !!python/tuple [116, 136, 136, 1, 1]
-      6: !!python/tuple [116, 136, 136, 1, 1]
-      7: !!python/tuple [138, 180, 180, 1, 1]
-      8: !!python/tuple [440, 400, 400, 1, 1]
+      1: !!python/tuple [58, 28, 86, 2, 1]
+      2: !!python/tuple [56, 28, 84, 2, 1]
+      3: !!python/tuple [66, 60, 86, 2, 1]
+      4: !!python/tuple [66, 60, 84, 1, 1]
+#      5: !!python/tuple [320, 320, 320, 1, 1]
 
 # fill parameters
 fill:
@@ -66,6 +63,3 @@
   3: !!python/tuple [2000, 2000, 1000, 1000, 0.2]
   4: !!python/tuple [2000, 2000, 1000, 1000, 0.2]
   5: !!python/tuple [2000, 2000, 1000, 1000, 0.2]
-  6: !!python/tuple [2000, 2000, 1000, 1000, 0.2]
-  7: !!python/tuple [2000, 2000, 1000, 1000, 0.2]
-  8: !!python/tuple [2000, 2000, 1000, 1000, 0.2]
diff --git a/workspace_setup/.bashrc b/workspace_setup/.bashrc
index 4102773..97d206c 100644
--- a/workspace_setup/.bashrc
+++ b/workspace_setup/.bashrc
@@ -1,74 +1,82 @@
 #! /usr/bin/env bash
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
+export PYTHONPATH=""
 
 ### Setup BAG
-export BAG_TOOLS_ROOT=/tools/bag3/core
 source .bashrc_bag
 
-# PDK specific stuff
-export SW_PDK_ROOT=${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK_root
-export PDK_HOME=${BAG_TECH_CONFIG_DIR}/workspace_setup/PDK
-export METAL_STACK=s8phirs_10r
-
-# calibre setup
-export MGLS_LICENSE_FILE=5282@login1.bcanalog.com
-export MGC_HOME=/tools/mentor/aoi_cal_2018.1_27.18
-export MGLS_HOME=/tools/mentor/mgls
-export CALIBRE_HOME=$MGC_HOME
+export PDK_HOME=$BAG_TECH_CONFIG_DIR/workspace_setup/PDK
+export SW_PDK_ROOT=/tools/commercial/skywater
+export SW_IP_HOME=${SW_PDK_ROOT}/s8_ip
+export METAL_STACK="s8phirs_10r"
 
 # location of various tools
-export CDS_INST_DIR=/tools/cadence/IC618
-export PEGASUS_HOME=/tools/cadence/PEGASUS184
-export SRR_HOME=/tools/cadence/SRR
-# export CDS_INST_DIR=/tools/cadence/IC618
-export SPECTRE_HOME=/tools/cadence/SPECTRE181
-export QRC_HOME=/tools/cadence/EXT191
-export INNOVUSHOME=/tools/cadence/installs/INNOVUS181
-export CDSLIB_HOME=/tools/bag3/programs/cdsLibPlugin
-export LATEX_BIN=/tools/texlive/2019/bin/x86_64-linux
+export MGC_HOME=/tools/mentor/calibre/aoi_cal_2022.2_24.16
+export CDS_INST_DIR=/tools/cadence/ICADVM/ICADVM181
+export PVS_HOME=/tools/cadence/PVS/PVS151
+export SPECTRE_HOME=/tools/cadence/SPECTRE/SPECTRE201
+export QRC_HOME=/tools/cadence/EXT/EXT191_ISR3
+export CMAKE_HOME=/tools/C/bag/programs/cmake-3.17.0 
 
-export CDSHOME=$CDS_INST_DIR
-export CDSLIB_TOOL=${CDSLIB_HOME}/tools.lnx86
+export CDSHOME=${CDS_INST_DIR}
 export MMSIM_HOME=${SPECTRE_HOME}
 
 # OA settings
-export OA_SRC_ROOT=/tools/bag3/programs/oa_22d6
-export OA_LINK_DIR=${OA_SRC_ROOT}/lib/linux_rhel60_64/opt
-# export OA_LINK_DIR=${OA_SRC_ROOT}/lib/linux_rhel50_gcc48x_64/opt
-export OA_CDS_ROOT=${CDS_INST_DIR}/oa_v22.60.007
-export OA_INCLUDE_DIR=${OA_SRC_ROOT}/include
-export OA_PLUGIN_PATH=${CDSLIB_HOME}/share/oaPlugIns:${OA_CDS_ROOT}/data/plugins:${OA_PLUGIN_PATH:-}
+export OA_CDS_ROOT=${CDS_INST_DIR}/oa_v22.60.s007
+export OA_PLUGIN_PATH=${OA_CDS_ROOT}/data/plugins:${OA_PLUGIN_PATH:-}
 export OA_BIT=64
 
 # PATH setup
-export PATH=${MGLS_HOME}/bin:${PATH}
-export PATH=${CALIBRE_HOME}/bin:${PATH}
-export PATH=${CDSLIB_TOOL}/bin:${PATH}
-export PATH=${PEGASUS_HOME}/bin:${PATH}
+export PATH=${MGC_HOME}/bin:${PATH}
+export PATH=${PVS_HOME}/bin:${PATH}
+export PATH=${QRC_HOME}/bin:${PATH}
 export PATH=${CDS_INST_DIR}/tools/plot/bin:${PATH}
 export PATH=${CDS_INST_DIR}/tools/dfII/bin:${PATH}
 export PATH=${CDS_INST_DIR}/tools/bin:${PATH}
 export PATH=${MMSIM_HOME}/bin:${PATH}
-export PATH=${QRC_HOME}/bin:${PATH}
-export PATH=${LATEX_BIN}:${PATH}
 export PATH=${BAG_TOOLS_ROOT}/bin:${PATH}
+export PATH=${CMAKE_HOME}/bin:${PATH}
 
 # LD_LIBRARY_PATH setup
-export LD_LIBRARY_PATH=${CDSLIB_TOOL}/lib/64bit:${LD_LIBRARY_PATH:-}
-export LD_LIBRARY_PATH=${OA_LINK_DIR}:${LD_LIBRARY_PATH}
-export LD_LIBRARY_PATH=${BAG_TOOLS_ROOT}/lib64:${LD_LIBRARY_PATH}
+export LD_LIBRARY_PATH=${BAG_WORK_DIR}/cadence_libs:${LD_LIBRARY_PATH}
 export LD_LIBRARY_PATH=${BAG_TOOLS_ROOT}/lib:${LD_LIBRARY_PATH}
-export LD_LIBRARY_PATH=${SRR_HOME}/tools/lib/64bit:${LD_LIBRARY_PATH}
+export LD_LIBRARY_PATH=${BAG_TOOLS_ROOT}/lib64:${LD_LIBRARY_PATH}
 
 # Virtuoso options
 export SPECTRE_DEFAULTS=-E
 export CDS_Netlisting_Mode="Analog"
 export CDS_AUTO_64BIT=ALL
-export CDS_LIC_FILE=5280@login1.bcanalog.com
+
+# License setup
+source /license/paths
+
+# Setup LSF (BWRC specific)
+# source /tools/support/lsf/conf/profile.lsf
+# export LBS_BASE_SYSTEM=LBS_LSF
+
+# Enable devtoolset
+source /opt/rh/devtoolset-8/enable
+source /opt/rh/rh-git29/enable
+source /opt/rh/httpd24/enable
 
 # pybag compiler settings
-export CMAKE_PREFIX_PATH=${BAG_TOOLS_ROOT}
-export HDF5_PLUGIN_PATH=${BAG_TOOLS_ROOT}/lib/hdf5/plugin
-
-# clear out PYTHONPATH
-export PYTHONPATH=""
-export PYTHONPATH_CUSTOM=${SRR_HOME}/tools/srrpython
+export CMAKE_PREFIX_PATH=${BAG_TOOLS_ROOT} 
diff --git a/workspace_setup/.bashrc_bag b/workspace_setup/.bashrc_bag
index 01a90fc..d95c864 100644
--- a/workspace_setup/.bashrc_bag
+++ b/workspace_setup/.bashrc_bag
@@ -1,23 +1,38 @@
 #! /usr/bin/env bash
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
 
-# set directory variables
 export BAG_WORK_DIR=$(pwd)
+export BAG_TOOLS_ROOT=/tools/C/bag/miniconda3/envs/latest 
 export BAG_FRAMEWORK=${BAG_WORK_DIR}/BAG_framework
 export BAG_TECH_CONFIG_DIR=${BAG_WORK_DIR}/skywater130
-export BAG_TEMP_DIR=${BAG_WORK_DIR}/BAGTMP
+export BAG_TEMP_DIR=/path/to/scratch/${USER}/BAGTMP/skywater130
 export IPYTHONDIR=${BAG_WORK_DIR}/.ipython
+
 # disable hash-salting. We need stable hashing across sessions for caching purposes.
 export PYTHONHASHSEED=0
-
 # set program locations
 export BAG_PYTHON=${BAG_TOOLS_ROOT}/bin/python3
-export BAG_JUPYTER=${BAG_TOOLS_ROOT}/bin/jupyter-notebook
 
 # set location of BAG configuration file
 export BAG_CONFIG_PATH=${BAG_WORK_DIR}/bag_config.yaml
 
-# change pycharm config file location
-export PYCHARM_PROPERTIES=/scratch/projects/${USER}/pycharm_setup/idea.properties
-
 # setup pybag
 export PYBAG_PYTHON=${BAG_PYTHON}
diff --git a/workspace_setup/.cdsenv b/workspace_setup/.cdsenv
index 57a9deb..84d278f 100644
--- a/workspace_setup/.cdsenv
+++ b/workspace_setup/.cdsenv
@@ -1,9 +1,30 @@
+;; Copyright 2019-2021 SkyWater PDK Authors
+;;
+;; Licensed under the Apache License, Version 2.0 (the "License");
+;; you may not use this file except in compliance with the License.
+;; You may obtain a copy of the License at
+;;
+;;     https://www.apache.org/licenses/LICENSE-2.0
+;;
+;; Unless required by applicable law or agreed to in writing, software
+;; distributed under the License is distributed on an "AS IS" BASIS,
+;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+;; See the License for the specific language governing permissions and
+;; limitations under the License.
+;;
+;; This code is *alternatively* available under a BSD-3-Clause license, see
+;; details in the README.md at the top level and the license text at
+;; https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+;;
+;; SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
 license	VLSL_UseNextLicense	string	"always"
 license	ADEL_UseNextLicense	string	"always"
 license	VLSXL_UseNextLicense	string	"always"
 license	VSEL_UseNextLicense	string	"always"
 
 asimenv.startup	simulator	string	"spectre"
+asimenv.startup         projectDir      string  "/tools/scratch/$USER/skywater130"
 ; Allows you to use multibit buses in stimulus files [#in_bits<0>], [#in_bits<1>], etc
 asimenv         mappingMode     string  "oss"
 
diff --git a/workspace_setup/.cdsenv.personal b/workspace_setup/.cdsenv.personal
index 96a7d7e..8a770f4 100644
--- a/workspace_setup/.cdsenv.personal
+++ b/workspace_setup/.cdsenv.personal
@@ -1,3 +1,23 @@
+;; Copyright 2019-2021 SkyWater PDK Authors
+;;
+;; Licensed under the Apache License, Version 2.0 (the "License");
+;; you may not use this file except in compliance with the License.
+;; You may obtain a copy of the License at
+;;
+;;     https://www.apache.org/licenses/LICENSE-2.0
+;;
+;; Unless required by applicable law or agreed to in writing, software
+;; distributed under the License is distributed on an "AS IS" BASIS,
+;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+;; See the License for the specific language governing permissions and
+;; limitations under the License.
+;;
+;; This code is *alternatively* available under a BSD-3-Clause license, see
+;; details in the README.md at the top level and the license text at
+;; https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+;;
+;; SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
 ; set default window size and location
 ; schematic symWindowBBox string "((20 20) (1900 1060))"
 ; schematic schWindowBBox string "((20 20) (1900 1060))"
diff --git a/workspace_setup/.cdsinit b/workspace_setup/.cdsinit
index b1b929b..6283355 100644
--- a/workspace_setup/.cdsinit
+++ b/workspace_setup/.cdsinit
@@ -1,3 +1,23 @@
+;; Copyright 2019-2021 SkyWater PDK Authors
+;;
+;; Licensed under the Apache License, Version 2.0 (the "License");
+;; you may not use this file except in compliance with the License.
+;; You may obtain a copy of the License at
+;;
+;;     https://www.apache.org/licenses/LICENSE-2.0
+;;
+;; Unless required by applicable law or agreed to in writing, software
+;; distributed under the License is distributed on an "AS IS" BASIS,
+;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+;; See the License for the specific language governing permissions and
+;; limitations under the License.
+;;
+;; This code is *alternatively* available under a BSD-3-Clause license, see
+;; details in the README.md at the top level and the license text at
+;; https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+;;
+;; SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
 
 printf("STARTING CDSINIT\n")
 
diff --git a/workspace_setup/.cdsinit.personal b/workspace_setup/.cdsinit.personal
index a726377..9ff8114 100644
--- a/workspace_setup/.cdsinit.personal
+++ b/workspace_setup/.cdsinit.personal
@@ -1,5 +1,25 @@
+;; Copyright 2019-2021 SkyWater PDK Authors
+;;
+;; Licensed under the Apache License, Version 2.0 (the "License");
+;; you may not use this file except in compliance with the License.
+;; You may obtain a copy of the License at
+;;
+;;     https://www.apache.org/licenses/LICENSE-2.0
+;;
+;; Unless required by applicable law or agreed to in writing, software
+;; distributed under the License is distributed on an "AS IS" BASIS,
+;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+;; See the License for the specific language governing permissions and
+;; limitations under the License.
+;;
+;; This code is *alternatively* available under a BSD-3-Clause license, see
+;; details in the README.md at the top level and the license text at
+;; https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+;;
+;; SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
 ; set simulation results to be saved in /tools/scratch
-envSetVal("asimenv.startup" "projectDir" 'string sprintf( nil "%s/simulation" getShellEnvVar( "BAG_WORK_DIR" ) ) )
+envSetVal("asimenv.startup" "projectDir" 'string sprintf( nil "%s/simulation" getShellEnvVar( "BAG_TEMP_DIR" ) ) )
 
 ; resize CIW window
 ; hiResizeWindow(window(1) list(540:100 1260:480))
diff --git a/workspace_setup/.gitignore b/workspace_setup/.gitignore
index b0d68f7..36ca3d3 100644
--- a/workspace_setup/.gitignore
+++ b/workspace_setup/.gitignore
@@ -4,57 +4,72 @@
 venv
 
 # Pycharm files
-.idea/workspace.xml
-.idea/usage.statistics.xml
 .idea/tasks.xml
+.idea/usage.statistics.xml
+.idea/workspace.xml
 
 # misc edit/log files
 *~
 *.log
+core.*
 IPOPT.out
 lsyncd.status
 
 # misc BAG files
 bag_sim
 bag_stimuli
-gen_outputs
 BAG_server_port.txt
 BAG_sim_server_port.txt
+gen_outputs
+gen_outputs_scratch
 pytest_output
 
 
 # misc configuration/history files
+.ipynb_checkpoints
 .ipython
 .jupyter
-.ipynb_checkpoints
 
 # generated files/directories
-calibre_run
-gen_libs
-pvs_run
-cds.lib
 BAGTMP
-spectre_run
+calibre_run
 cdl_netlist
+cds.lib
+gen_libs
 netlist
+pvs_run
 sim
-gen_output
+simulation
+spectre_run
 
 # cadence files
 .abstract
+abstract*
+beol.drc.*
 .cadence
+cadence_libs
 *.cdslck
 .calibreviewsetup
-.tmp_*
+gui.tcl
+hdl.var
+lefout.list
 libManager.log.*
-abstract*
+PIPO.*
+si.env
+.tmp_*
+xOasisOut_cellMap.txt
 
 # calibre files
 .cgidrcdb
 .cgilvsdb
 calibreview.setup
+ihnl
+map
+.stimulusFile.auCdl
 
 # pvs files
-.QRC.run
 .preRcx.Last.State
+.QRC.run
 .qrc.Last.state
+
+.nfs*
diff --git a/workspace_setup/.simrc b/workspace_setup/.simrc
index ccb3f02..293bf73 100644
--- a/workspace_setup/.simrc
+++ b/workspace_setup/.simrc
@@ -1,2 +1,3 @@
-auCdlCDFPinCntrl = 't
+auCdlCDFPinCntrl = t
 auCdlSkipMEGA = 't
+simDetectPCellFailure="ignore"
diff --git a/workspace_setup/PDK b/workspace_setup/PDK
index 8c2529c..61572bf 120000
--- a/workspace_setup/PDK
+++ b/workspace_setup/PDK
@@ -1 +1 @@
-PDK_root/V1.3.0
\ No newline at end of file
+/tools/commercial/skywater/swtech130/skywater-src-nda/s8/V2.0.0
\ No newline at end of file
diff --git a/workspace_setup/bag_config.yaml b/workspace_setup/bag_config.yaml
index 95c1450..f375046 100644
--- a/workspace_setup/bag_config.yaml
+++ b/workspace_setup/bag_config.yaml
@@ -17,7 +17,6 @@
 # https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
-
 # BAG socket configuration
 socket:
   # the host running the database.  localhost if on the same machine.
@@ -33,7 +32,8 @@
 # Right now only virtuoso is supported.
 database:
   # the python class that handles database interaction.
-  class: "bag.interface.oa.OAInterface"
+#  class: "bag.interface.oa.OAInterface"
+  class: "bag.interface.skill.SkillInterface"
   # default directory to create generated libraries in.
   default_lib_path: "${BAG_WORK_DIR}/gen_libs"
   # If true, then everytime we generate schematic/layout from BAG, all opened cellviews are closed
@@ -44,32 +44,28 @@
     # technology library to configure new libraries with
     tech_lib: "s8phirs_10r"
     # libraries to exclude for schematic import
-    exclude_libraries: ["analogLib", "basic", "s8phirs_10r"]
+    exclude_libraries: ["analogLib", "basic", "s8phirs_10r", "veriloga_lib", "ahdllib"]
     # libraries to exclude for modeling purposes
     model_exclude_libraries: []
     # cells to exclude for modeling purposes
     model_exclude_cells:
       basic: ['noConn']
-  # configurations for testbench creation
-  testbench:
-    # config view global libraries
-    config_libs: "s8phirs_10r analogLib basic"
-    # config view cellviews
-    config_views: "spectre schematic av_extracted veriloga"
-    # config view stop cellviews
-    config_stops: "spectre veriloga"
-    # default simulation environment name
-    default_env: "tt"
-    # simulation environment file
-    env_file: "${BAG_TECH_CONFIG_DIR}/corners_setup.yaml"
-    # definition files to include
-    def_files: []
+    # symbol pin master
+    sympin: ["basic", "sympin", "symbolNN"]
+    # input pin master
+    ipin: ["basic", "ipin", "symbol"]
+    # output pin master
+    opin: ["basic", "opin", "symbol"]
+    # inout pin master
+    iopin: ["basic", "iopin", "symbolr"]
+    # simulators where termOrder CDF field should be filled
+    simulators: ["auLvs", "auCdl", "spectre", "hspiceD"]
   # configurations used to create a Checker object to run LVS/RCX
   checker:
     # the Checker class.
     checker_cls: 'bag.verification.calibre.Calibre'
     # program used to run extraction
-    rcx_program: 'qrc'
+    rcx_program: xrc
     # maximum number of sub-processes BAG can launch.
     max_workers: 2
     # source.added location
@@ -83,7 +79,7 @@
     template:
       drc: '${BAG_TECH_CONFIG_DIR}/calibre_setup/drc.svrf'
       lvs: '${BAG_TECH_CONFIG_DIR}/calibre_setup/lvs.svrf'
-      rcx: ''
+      rcx: '${BAG_TECH_CONFIG_DIR}/calibre_setup/rcx.svrf'
     # environment variables
     env_vars:
       drc: {}
@@ -97,7 +93,15 @@
     params:
       drc: {}
       lvs: {}
-      rcx: {}
+      rcx:
+        # extract_type: rc_coupled  # r_only | c_only_decoupled | c_only_coupled | rc_decoupled | rc_coupled | rlc_decoupled | rlc_coupled for QRC
+        # extract_type: RCc  # R | Cg | Cc | RCg | RCc for StarRC
+        extract_type: rcc  # rcc | rc | r | c for xRC. See Parasitic Database (PDB) in manual
+        netlist_type: SPF   # SPF or SPECTRE
+    # the SubProcessManager class
+    # mgr_class: 'bag.concurrent.lsf.LSFSubProcessManager'  # runs jobs on the LSF
+    # mgr_kwargs:
+    #   queue: rhel7  # LSF queue
 
 # Simulation configurations
 simulation:
@@ -116,17 +120,24 @@
   # command settings
   kwargs:
     # the command to start
-    #command: "bsub -q bora -o $BAG_WORK_DIR/tmp -K spectre"
     command: spectre
     # environment variables.  Null for same environment as SkillOceanServer.
     env: !!null
     # True to run in 64-bit mode
     run_64: True
     # output format
-    format: psfxl
+    format: psfbin #psfxl
     # psf version
     psfversion: '1.1'
-    options: ['++aps', '+lqtimeout', '0', '+mt=8', '+mp=8', '+postlayout', '+rcnet_fmax=25']
+    options: ['++aps', '+lqtimeout', '0', '+mt=8', '+mp=8', '+postlayout']
+  # True if using pysrr for SRR to HDF5 conversion. False to use executable
+  # Executable runs faster for smaller simulation data, pysrr runs faster for highly parameterized simulation data
+  use_pysrr: False
+  # the SubProcessManager class
+  # mgr_class: 'bag.concurrent.lsf.LSFSubProcessManager'  # runs jobs on the LSF
+  # mgr_kwargs:
+  #   queue: rhel7  # LSF queue
+
   compress: True
   rtol: 1.0e-8
   atol: 1.0e-22
@@ -136,7 +147,10 @@
   class: 'bag.interface.abstract.AbstractInterface'
   run_dir: 'abstract_run'
   options_file: '${BAG_TECH_CONFIG_DIR}/abstract_setup/bag_abstract.options'
-
+  # the SubProcessManager class
+#  mgr_class: 'bag.concurrent.lsf.LSFSubProcessManager'  # runs jobs on the LSF
+#  mgr_kwargs:
+#    queue: rhel7  # LSF queue
 
 # technology specific configuration are stored in a separate file.
 # this field tells BAG where to look for it.
diff --git a/workspace_setup/bag_submodules.yaml b/workspace_setup/bag_submodules.yaml
index fcc0320..cadb820 100644
--- a/workspace_setup/bag_submodules.yaml
+++ b/workspace_setup/bag_submodules.yaml
@@ -17,17 +17,16 @@
 # https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
-
 BAG_framework:
-  url: https://github.com/bluecheetah/bag.git
-  branch: master
+  url: git@10.8.0.1:bag/BAG_framework.git
+  branch: sim_refactor
 bag3_digital:
-  url: https://github.com/bluecheetah/bag3_digital.git
-  branch: master
+  url: git@10.8.0.1:bag/bag3_digital.git
+  branch: sim_refactor
 bag3_testbenches:
-  url: https://github.com/bluecheetah/bag3_testbenches.git
-  branch: master
+  url: git@10.8.0.1:bag/bag3_testbenches.git
+  branch: sim_refactor
 xbase_bcad:
-  url: https://github.com/bluecheetah/xbase.git
-  branch: master
+  url: git@10.8.0.1:bag/xbase_bcad.git
+  branch: sim_refactor
 
diff --git a/workspace_setup/cds.lib.core b/workspace_setup/cds.lib.core
index 7ae3529..03cc8e5 100644
--- a/workspace_setup/cds.lib.core
+++ b/workspace_setup/cds.lib.core
@@ -1,6 +1,27 @@
+# Copyright 2019-2021 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This code is *alternatively* available under a BSD-3-Clause license, see
+# details in the README.md at the top level and the license text at
+# https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
+#
+# SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
+
 # cadence base libraries
 DEFINE     analogLib    $CDSHOME/tools/dfII/etc/cdslib/artist/analogLib
 DEFINE     basic        $CDSHOME/tools/dfII/etc/cdslib/basic
+DEFINE     ahdlLib      $CDSHOME/tools/dfII/samples/artist/ahdlLib
 
 # technology base libraries
 DEFINE     s8phirs_10r  $BAG_TECH_CONFIG_DIR/workspace_setup/PDK/VirtuosoOA/libs/s8phirs_10r
@@ -10,6 +31,8 @@
 DEFINE	   s8rf		$BAG_TECH_CONFIG_DIR/workspace_setup/PDK/VirtuosoOA/libs/s8rf 
 DEFINE	   s8rf2	$BAG_TECH_CONFIG_DIR/workspace_setup/PDK/VirtuosoOA/libs/s8rf2 
 DEFINE	   s8rf2_dv	$BAG_TECH_CONFIG_DIR/workspace_setup/PDK/VirtuosoOA/libs/s8rf2_dv
+DEFINE	   scs8hd	/tools/commercial/skywater/swtech130/skywater-src-nda/scs8hd/V0.0.2/oa/scs8hd
+DEFINE	   scs8hd_dv	/tools/commercial/skywater/swtech130/skywater-src-nda/scs8hd/V0.0.2/oa/scs8hd_dv
 
 ASSIGN tech DISPLAY Invisible 
 ASSIGN technology_library DISPLAY Invisible 
diff --git a/workspace_setup/ipython_config.py b/workspace_setup/ipython_config.py
index a4a9cfb..86807a0 100644
--- a/workspace_setup/ipython_config.py
+++ b/workspace_setup/ipython_config.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
+# 
 # Copyright 2019-2021 SkyWater PDK Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,8 +20,7 @@
 # https://github.com/google/skywater-pdk-libs-sky130_bag3_pr/blob/master/LICENSE.alternative
 #
 # SPDX-License-Identifier: BSD-3-Clause OR Apache 2.0
-
-
+#
 # Configuration file for ipython.
 import os
 c = get_config()
diff --git a/workspace_setup/leBindKeys.il b/workspace_setup/leBindKeys.il
index e3cf06c..3b4419c 100644
--- a/workspace_setup/leBindKeys.il
+++ b/workspace_setup/leBindKeys.il
@@ -95,6 +95,7 @@
             sprintf(via_name "via%d" bot_layer)
         )
 	    sprintf(top_name "met%d" bot_layer + 1)
+	
         leSetEntryLayer(list(bot_name "drawing"))
         leSetAllLayerVisible(nil)
         leSetLayerVisible(list(bot_name "drawing") t)
diff --git a/workspace_setup/tutorial_files/.gitignore b/workspace_setup/tutorial_files/.gitignore
deleted file mode 100644
index 5bf6ffc..0000000
--- a/workspace_setup/tutorial_files/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-demo_data
-stimuli
diff --git a/workspace_setup/tutorial_files/1_flow_demo.ipynb b/workspace_setup/tutorial_files/1_flow_demo.ipynb
deleted file mode 100644
index 16d6a04..0000000
--- a/workspace_setup/tutorial_files/1_flow_demo.ipynb
+++ /dev/null
@@ -1,246 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Module 1: BAG Workflow Demo\n",
-    "Welcome to the BAG tutorial! In this module, you will test run a simple demo of a common-source amplifier design to get an idea of generator-based design methodology.  This also serves to make sure you setup your workspace properly."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## BAG Workflow\n",
-    "\n",
-    "<img src=\"bootcamp_pics/1_flow_demo/flow_demo_1.PNG\" alt=\"Drawing\" style=\"width: 600px\"/>\n",
-    "\n",
-    "The above flow diagram outlines how circuit design is typically done with BAG.  You will notice that it is largely similar to traditional manual design flow, with two major differences:\n",
-    "\n",
-    "* Designer focus on designing schematic/layout/testbench generators, instead of specific circuit instances.\n",
-    "* Layout is usually done before schematic.\n",
-    "\n",
-    "Discussions about the benefits of designing circuit generators instead of instances are outside of the scope of this tutorial, so I will assume you are already convinced.  So, why do we design layout generators before schematic generators?  There are several reasons:\n",
-    "\n",
-    "* Since BAG can easily automates layout and post-extraction simulations, there is almost no need for schematic only simulations.\n",
-    "* One schematic could correspond to many different layouts (each with a different floorplan strategy), whereas one layout corresponds to exactly one schematic.\n",
-    "* It is impossible to determine schematic details such as dummy transistors before layout is done.\n"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## BAG Schematic Example\n",
-    "<img src=\"bootcamp_pics/1_flow_demo/flow_demo_2.PNG\" alt=\"Drawing\" style=\"width: 500px\"/>\n",
-    "\n",
-    "The above figure shows the schematic template used for a common-source amplifier schematic generator, you can find this schematic in Virtuoso in library `demo_templates` and cell `amp_cs`.  Note that this is just like any other normal schematics, with the following differences:\n",
-    "\n",
-    "* Transistors are from the `BAG_prim` library.  In this way this schematic can be ported across process by simply changing the `BAG_prim` library.\n",
-    "* Dummy transistors' ports are connected using wire stubs and net labels.  This allows BAG to easy reconnect those ports if necessary.\n",
-    "\n",
-    "When BAG generates a new schematic, it will simply copy this schematic to a new library, then perform a set of modifications described by the schematic generator.  The modifications could include:\n",
-    "\n",
-    "* Delete instances.\n",
-    "* Create new instances.\n",
-    "* Change the master of an instance.\n",
-    "* Reconnect instance terminals.\n",
-    "* Modify instance parameters.\n",
-    "* Add/Remove/Rename pins.\n"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Testbench Schematic Example\n",
-    "<img src=\"bootcamp_pics/1_flow_demo/flow_demo_3.PNG\" alt=\"Drawing\" style=\"width: 400px\"/>\n",
-    "The above figure shows a schematic template for a DC operating point testbench generator, which can be found in library `bag_testbenches_ec` and cell `amp_tb_dc`.  It is just like the schematic template we seen before, but instead of a symbol view it has an ADEXL view.  To generate a new testbench, BAG will copy and modify both the schematic and the ADEXL view and returns a `Testbench` object that can be used to control simulations from Python."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Testbench ADEXL Setup\n",
-    "<img src=\"bootcamp_pics/1_flow_demo/flow_demo_4.PNG\" alt=\"Drawing\" style=\"width: 500px\"/>\n",
-    "The figure above shows the ADEXL view associated with a testbench template.  ADEXL is used to enable parametric/process corner sweeps."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Running Demo Work Flow\n",
-    "```python\n",
-    "def run_flow(prj, specs, dsn_name, lay_cls, sch_cls=None, run_lvs=True, lvs_only=False):\n",
-    "    # generate layout, get schematic parameters from layout\n",
-    "    dsn_sch_params = gen_layout(prj, specs, dsn_name, lay_cls)\n",
-    "    # generate design/testbench schematics\n",
-    "    gen_schematics(prj, specs, dsn_name, dsn_sch_params, sch_cls=sch_cls, check_lvs=run_lvs, lvs_only=lvs_only)\n",
-    "\n",
-    "    if lvs_only:\n",
-    "        # return if we're only running LVS\n",
-    "        print('LVS flow done')\n",
-    "        return\n",
-    "\n",
-    "    # run simulation and import results\n",
-    "    simulate(prj, specs, dsn_name)\n",
-    "\n",
-    "    # load simulation results from save file\n",
-    "    res_dict = load_sim_data(specs, dsn_name)\n",
-    "    # post-process simulation results\n",
-    "    plot_data(res_dict)\n",
-    "\n",
-    "```\n",
-    "Now that you have an rough idea of how BAG generates new schematics and testbenches, let's try to run the common-source amplifier design flow.  To do so, simple select the code box below and press Ctrl+Enter to evaluate the Python code.  If everything works fine, you should see output messages in the dialog box below the code box, and it should end with DC/AC/Transient simulation plots.  Schematics, layouts, and testbenches should also be generated in the `DEMO_AMP_CS` library in Virtuoso, so you can take a look over there.\n",
-    "\n",
-    "The Python script simply performs the following:\n",
-    "\n",
-    "* Read a specification file to get schematic/layout/testbench/simulation parameters.\n",
-    "* Create a `BagProject` instance to perform various functions.\n",
-    "* Call the `run_flow()` method defined in Python module `xbase_demo.core` to execute the common source amplifier design flow.\n",
-    "\n",
-    "The `xbase_demo.core` module is defined in the file `$BAG_WORK_DIR/BAG_XBase_demo/xbase_demo/core.py`.  You can take a look if you're interested, but the `run_flow()` method definition is reproduced above for your convenience.  You can see it simply calls other methods to generate layout/schematics, run simulations, and post-process simulation results."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "creating BagProject\n",
-      "computing layout\n",
-      "ext_w0 = 1, ext_wend=1, ytop=2592\n",
-      "final: ext_w0 = 1, ext_wend=1, ytop=2592\n",
-      "{'s': WireArray(TrackID(layer=3, track=7, num=9, pitch=2), 1109, 1265, 0.001), 'd': WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 1231, 1387, 0.001), 'g': WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 915, 1071, 0.001)}\n",
-      "WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 915, 1071, 0.001)\n",
-      "6.5\n",
-      "creating layout\n",
-      "layout done\n",
-      "computing AMP_CS schematics\n",
-      "creating AMP_CS schematics\n",
-      "running lvs\n",
-      "Running tasks, Press Ctrl-C to cancel.\n",
-      "lvs passed\n",
-      "lvs log is /users/erichang/projects/bag_gen/BAG2_cds_ff_mpt/pvs_run/lvs_run_dir/DEMO_AMP_CS/AMP_CS/lvsLog_20180906_102350my93d2vr\n",
-      "computing AMP_CS_tb_dc schematics\n",
-      "creating AMP_CS_tb_dc schematics\n",
-      "computing AMP_CS_tb_ac_tran schematics\n",
-      "creating AMP_CS_tb_ac_tran schematics\n",
-      "schematic done\n",
-      "setting up AMP_CS_tb_dc\n",
-      "running simulation\n",
-      "Running tasks, Press Ctrl-C to cancel.\n",
-      "simulation done, load results\n",
-      "setting up AMP_CS_tb_ac_tran\n",
-      "running simulation\n",
-      "Running tasks, Press Ctrl-C to cancel.\n",
-      "simulation done, load results\n",
-      "all simulation done\n",
-      "loading simulation data for AMP_CS_tb_dc\n",
-      "loading simulation data for AMP_CS_tb_ac_tran\n",
-      "finish loading data\n",
-      ", gain=-3.822\n",
-      ", f_3db=3.601e+09, f_unity=9.122e+09, phase_margin=107.7\n"
-     ]
-    },
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEWCAYAAACXGLsWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xd4HNXV+PHv2V11ySqWXGVb7t3YWDZgwKGYxAGC6RgIEJJAIAHehJDwS3lTSN43BEKABJJg8hIgVENoIXQwzWBjuffeJBfJki3J6to9vz9mbGRhadfSSrtanc/zzLM7M3funuuyZ2fmzr2iqhhjjDGt8UQ6AGOMMdHPkoUxxpigLFkYY4wJypKFMcaYoCxZGGOMCcqShTHGmKAsWRgTA0TkpyLy90jHYWKXJQsT00TkTRG54yjbZ4nIHhHxtbP+90Xk2+2pI4TPeEhEHj/K9gkiUiciWar6v6raoXGY7s2ShYl1jwJXiYg0234V8KSqNnZ+SMfsUeBCEUlptv1q4FVVLev8kEx3Y8nCxLqXgCzg1EMbRCQTOBd43F1PF5HHRaRERLaLyM9FxOPu+5WIPNHk2DwRURHxicj/uPU+ICIHReSB5h8uIm+IyE3Nti0XkQvFca+IFItIuYisEJFxzetQ1U+BIuCiJnV4gSuAx5rH2STGa0Rkh4jsE5GftfUP0BiwZGFinKrWAHNxfoUfcimwTlWXu+t/BtKBIcCX3LLXhlD3z4CPgJtUNVVVbzpKsaeAyw+tiMgYYBDwH+DLwHRgBJABXAaUtvBxjzdrwwwgDni9lRBPAUYCZwK/EJHRwdpkTEssWZju4DHgEhFJctev5vNf5F6cL+mfqGqlqm4D7sG5TBUOLwITRWSQu34l8IKq1gENQBowChBVXauqu1uo55/Al0Qkt0kbnlLVhlY++9eqWuMmxeXAce1tjOm+LFmYmKeqHwMlwCwRGQJMwfnFD5ANxAPbmxyyHegfps+uxDmLmO1umg086e57D3gAeBDYKyJzRKRHC/XsAD4Evi4iqcD5uAmvFXuavK8GUtvaDmMsWZju4tBlnKuAt1R1r7t9H84v/EFNyg7EuUcAUAUkN9nXp1m9oQzb/DRwuYicBCQB8w4frPonVZ0MjMW5HPWjVup5zG3DRcBWVV0SwmcbExaWLEx38TjOdf7raPKLXFX9OPc0/kdE0tzLRbcCh25qLwOmi8hAEUkHftKs3r049zpa8xpOMroDeFZVAwAiMkVEThCROJykVAv4W6nnX8AA4NcEP6swJqwsWZhuwb0X8QmQArzSbPfNOF/WW4CPcS5RPeIe9zbwLLACWAy82uzY+4GLRWS/iPyphc+uA17ASVZPNdnVA3gY2I9z6asU+EMrbaji84TxZGvtNSbcxCY/MsYYE4ydWRhjjAnKkoUxxpigLFkYY4wJypKFMcaYoNo14mY0yc7O1ry8vEiHYYwxXcrixYv3qWpOsHIxkyzy8vIoKCiIdBjGGNOliMj24KXsMpQxxpgQWLIwxhgTVMxchmqrqrpGTv79e+T1TGFIdgpDclIYkpPKkJwU8nqmkBjnjXSIxhgTcd0+WdQ1Bjh3Ql+2lFTxyeZSXlhadHifCAzITGZ4r1SGucvw3mkM65VKakK3/6MzxnQj3f4bLyslnt+eP/7welVdI1v3VbFlXxWbiw+yueQgm4oP8tHGfdT7A4fL5WYmMapPGiP7pDGyTw9G90ljcHYKPq9d2TPGxJ5unyyaS0nwMa5/OuP6px+xvdEfYOf+GjbsrWTj3krW7alk/Z5K5q0vwR9wxtdK8HkY1SeNMf16MKZvD8b0S2dM3x4kxdulLGNM1xYzAwnm5+drJLrO1jX62Vxcxbo9FazZVcGa3c5yoNqZwMzrEYb3SmV8/3Qm5KYzcUAmo/qmEWdnIMaYKCAii1U1P2g5Sxbhp6rsKq9ldVE5K4vKWVHovJZV1QPOGcj4/ulMHJDB5EGZTM7LpFdaYoSjNsZ0R5YsooyqUnSghmU7D7B0xwGW7TzAyqJy6hud+yCDeiaTPyiLEwZnccKQLAZmJSMiEY7aGBPrQk0Wds+ik4gIuZnJ5GYmc+6EfgDUNwZYtaucgm1lFGzbz/vri/nXkkIA+vRI5KShPZk2tCenDM+mb3pSJMM3xnRzdmYRRVSVTcUHWbC1jAVbSlmwuZRS99LVkJwUpg/P4UsjczhxcE+7aW6MCQu7DBUDAgFl/d5K5m/ax0cb97FgSyl1jQHifR6mDe3JmaN7M2N0LzvrMMa0mSWLGFTb4OezrWXMW1/Me+uK2V5aDcD4/unMHNeHr4ztw7BeqRGO0hjTlViyiHGqyuaSg7y9ppi31uxh6Y4DAIzqk8Y54/vyteP6kZedEuEojTHRzpJFN7OnvJY3Vu3m1RW7Kdi+H4CJAzK48Pj+fG1CPzJT4iMcoTEmGlmy6MaKDtTw6vJdvLi0iHV7Kon3ejhrbG9mTxnAyUOz8XisS64xxmHJwgCwelc5zxUU8tKyIg5UNzCoZzJXnjCQS/MHkJFsZxvGdHdRkSxEZCZwP+AF/q6qdzbbfy9wuruaDPRS1Qx3nx9Y6e7boarntfZZlixaV9vg583Ve3hywQ4+21ZGYpyHCybl8q1TBttNcWO6sYgnCxHxAhuAs4BCYBFwuaquaaH8zcAkVf2mu35QVUP+FrNkEbq1uyt47JNtvLi0iLrGADNG9+LG04YxeVBmpEMzxnSyUJNFR45mNxXYpKpbVLUeeAaY1Ur5y4GnOzAe4xrdtwd3XjSB+f/vDP7rzOEUbN/PRX/9hCseXsDCLaWRDs8YE4U6Mln0B3Y2WS90t32BiAwCBgPvNdmcKCIFIrJARM5v4bjr3TIFJSUl4Yq728hOTeAHZ41g/u1n8PNzRrNh70Eum7OAr/99ISsKD0Q6PGNMFOnIZHG0LjctXfOaDTyvqv4m2wa6p0ZXAPeJyNAvVKY6R1XzVTU/Jyen/RF3UykJPr596hA++vHp/Ozs0azZXcF5D8zne08tYWdZdaTDM8ZEgY5MFoXAgCbrucCuFsrOptklKFXd5b5uAd4HJoU/RNNUUryX66YP4YMfncYtZwzj3bV7OfOeD7jrjXVU1TVGOjxjTAR1ZLJYBAwXkcEiEo+TEF5pXkhERgKZwKdNtmWKSIL7Phs4GTjqjXETfmmJcdz65ZG8f9vpnDuhL395fzMz/vgBr6/cTax0tTbGHJsOSxaq2gjcBLwJrAXmqupqEblDRJp2g70ceEaP/BYaDRSIyHJgHnBnS72oTMfpk57IHy+byL9uPImM5HhufHIJ1z2+mD3ltZEOzRjTyeyhPBOSRn+AR+Zv5Y9vbyDO6+EX547h4sm5NkGTMV1cNHSdNTHE5/Vw/fShvPFf0xndpwc/en4FNzyx+PBUscaY2GbJwhyTvOwUnr7+RH569ijmrSvhq/d/yAJ7NsOYmGfJwhwzr0e4fvpQXvjuNFLifVzx8AIenLeJQCA2LmkaY77omJKFiKS4w3gYw7j+6bxy8ymcO6Efd7+5nu88sZjK2oZIh2WM6QCtJgsR8YjIFSLyHxEpBtYBu0VktYjcLSLDOydME61SE3zcP3siv/zaGN5bV8yFf/mE7aVVkQ7LGBNmwc4s5gFDgZ8AfVR1gKr2Ak4FFgB3isjXOzhGE+VEhGtPHsw/vzWVkoN1nP/gfAq2lUU6LGNMGLXadVZE4lS11esKoZTpDNZ1Njps21fFtY8uouhADX+aPZGZ4/pGOiRjTCvC1XX2RfcyVIuTOUdDojDRIy87hRdunMa4fj248cklPLVwR6RDMsaEQbBk8TDwNWCriDwrIue7Q3cY06LMlHie/PaJnDYih5++uJKHPtgc6ZCMMe3UarJQ1ZdV9XJgEPACcA2wQ0QeEZGzOiNA0zUlxXuZc3U+507oy+9eX8ef3t0Y6ZCMMe3gC6WQqtYAzwLPisgE4DGcxGHdaE2L4rwe7p89iXifhz++vQGAW860DnTGdEUhJQsR6Q1cijNybF/gOeDaDozLxAivR7j74uMADo8rdeNpX5iaxBgT5VpNFiJyHc6osCNxLkP9WFXnd0ZgJnYcShiNfuX3b6wjNcHLVSflRTosY8wxCHZmMQ24E3hHVQOdEI+JUV6PcM+lx1Fd7+cXr6wmPTme847rF+mwjDEhCtYb6teq+lZLiUIcuR0Ql4lBcV4PD1wxiSl5Wfxw7jI+3rgv0iEZY0IULFncLSL/EpGrRWSsiPQSkYEicoaI/AaYjzNRkTEhSYzz8vDV+QzNSeWGJxazdndFpEMyxoQgWNfZS4D/xrln8SDwEfAy8G1gPXCGqr7d0UGa2JKeFMc/rp1CaoKPbz66iL0VNvOeMdHOZsozEbNmVwWX/O0ThuSkMvc7J5EUbz2xjelsNlOeiXpj+vXg/tmTWLWrnNueX06s/HAxJhZ1aLIQkZkisl5ENonI/zvK/m+ISImILHOXbzfZd42IbHSXazoyThM5M8b05vaZo/jPit08OG9TpMMxxrQgpIfy2sKdJOlB4CygEFgkIq+o6ppmRZ9V1ZuaHZsF/BLIBxRY7B67v6PiNZHznelDWLu7gnve3sDYfumcPqpXpEMyxjQT0pmFiLwbyrZmpgKbVHWLqtYDzwCzQozrK8DbqlrmJoi3gZkhHmu6GBHhzgsnMLpPD255ZqlNnmRMFAo2U16i+ys/W0QyRSTLXfKAYE9U9Qd2NlkvdLc1d5GIrBCR50VkwLEcKyLXi0iBiBSUlJQECcdEs6R4Lw9dNRmPCDc8sYTaBn+kQzLGNBHszOI7wGJgFLDEfb8Yp/vsg0GOlaNsa34H899AnqpOAN7BGaAw1GNR1Tmqmq+q+Tk5OUHCMdFuQFYy982eyNrdFfz3S6siHY4xpolgz1ncr6qDgdtUdXCT5ThVfSBI3YXAgCbrucCuZvWXqmqdu/owMDnUY01sOn1kL24+YxjPLS5kbsHO4AcYYzpFqDe4y0Xk6uYbVfXxVo5ZBAwXkcFAEc6ItVc0LSAifVV1t7t6HrDWff8m8L8ikumufxlnHnDTDXx/xggWb9/PL15excQBGYzonRbpkIzp9kLtOjulyXIq8CucL/cWqWojcBPOF/9aYK6qrhaRO0Tk0LG3iMhqEVkO3AJ8wz22DPgNTsJZBNzhbjPdgNcj3Dd7IqkJcXz3ySVU1zdGOiRjur02PcEtIunAP1W11YTRmewJ7tgzf9M+vv5/C7lkci53uXNiGGPCq6Of4K4GbMoz06FOHpbN904bxtyCQl5eVhTpcIzp1kKdKe/ffN4byYsz0uzcjgrKmEO+P2M4C7aU8rMXV3FcbgZ52SmRDsmYbinUM4s/APe4y/8C01X1C8N3GBNuPq+H+2ZPxCNwyzNLqW+0ObiMiYSQkoWqfgCsA9KATKC+I4MypqnczGTuungCKwrLufvNdZEOx5huKdThPi4FPgMuAS4FForIxR0ZmDFNzRzXl6+fOJCHP9rKvPXFkQ7HmG4n1MtQPwOmqOo1qno1zrhP/91xYRnzRT8/Zwyj+qTxw7nLbcIkYzpZqMnCo6pNf86VHsOxxoRFYpyXB644npp6P7c8vZRGv92/MKazhPqF/4aIvOnOP/EN4D/Aax0XljFHN6xXKr89fxwLt5Zx/7sbIx2OMd1GSF1nVfVHInIhcArOIH9zVPXFDo3MmBZcNDmXBVtKeWDeJiYPyuS0kTb/hTEdLdgQ5Q+IyDQAVX1BVW9V1R9YojCRdsescYzsncb3n11G4f7qSIdjTMwLdhlqI3CPiGwTkd+LyMTOCMqYYJLivfz165Px+5Ubbf4LYzpcKEOUnwR8CSgD/iEia0XkFyIyolMiNKYFg7NTuPeyiazaVc7t/1pBW8Y5M8aEJtSH8rar6u9VdRLOMOMX8Plw4sZEzIwxvbntyyN5edkuHnhvU6TDMSZmhfpQXpyIfE1EngReBzYAF3VoZMaE6LunDeWCSf255+0NvLi0MNLhGBOTWu0NJSJnAZcD5+A8wf0McL2qVnVCbMaERES486Lx7Cmv5UfPrSAjKZ7TR1kPKWPCKdiZxU+BT4HRqvo1VX3SEoWJRgk+Lw9dPZlRfdO44YnFzN+0L9IhGRNTgt3gPl1VH7ZZ6kxX0CMxjse/eQKDs1P45qOLbAwpY8LIhuwwMSUrJZ6nrjuRYb1Sue6xAruHYUyYWLIwMScrJZ6nrz+RKXlZ/ODZ5fzhzfX4A9at1pj26NBkISIzRWS9iGwSkS9MliQit4rIGhFZISLvisigJvv8IrLMXV7pyDhN7OmRGMdj35zKZfkDeGDeJr7xj88orrSRao1pqw5LFiLiBR4EvgqMAS4XkTHNii0F8lV1AvA8cFeTfTWqOtFdzuuoOE3sivd5uPOi8fzuwvF8trWMmfd9xKsrdtnDe8a0QUeeWUwFNqnqFlWtx+l2O6tpAVWdp6qHBvZZAOR2YDymGxIRLp86kP/ccgr9M5K46amlXPvoIjaXHIx0aMZ0KR2ZLPoDO5usF7rbWvItnAf+DkkUkQIRWSAi53dEgKb7GNYrjRe/O42fnzOagm37+cq9H/LTF1ey60BNpEMzpksIaYjyNpKjbDvq+b+IfB3IxxmD6pCBqrpLRIYA74nISlXd3Oy464HrAQYOHBieqE3M8nk9fPvUIcya2J/7393As4t28lzBTmZN7M+3ThnM6L49Ih2iMVFLOur6rYicBPxKVb/irv8EQFV/16zcDODPwJeazcbXtMyjwKuq+nxLn5efn68FBQVhit50B4X7q5nz4RaeKyikpsHP5EGZXJY/gLMn9CU1oSN/RxkTPURksarmBy3XgcnChzOG1JlAEbAIuEJVVzcpMwnnxvZMVd3YZHsmUK2qdSKSjfMU+SxVXdPS51myMG11oLqeuQU7eXbRTjaXVBHv83D6yBzOHt+X00b2Ij0pLtIhGtNhIp4s3CDOBu4DvMAjqvo/InIHUKCqr4jIO8B4YLd7yA5VPc+dcOkhIIBzX+U+Vf2/1j7LkoVpL1VlyY79/Hv5bl5buZviyjq8HmHywExOG5XDtKHZjO3XgzivPZ5kYkdUJIvOZMnChFMgoCzduZ9560qYt76Y1bsqAEiO9zJ5UCZT87I4bkAGE3LTyUiOj3C0xrSdJQtjwqi4spbPtpbx2dYyFm4pY/3eysP7BvVMZkJuBqP7pjGydxoj+6TRPyMJkaP18TAmuliyMKYDldc0sKqonOWFB1ixs5yVReUUNemGm5rgY0TvVIbmpJKXncJgd8nrmUJSvDeCkRtzJEsWxnSyitoGNu6tZN2eSjbscV637quiuLLuiHJ9eiQyMCuZ3Mwk+mcm0T/j89d+GUkkxlkyMZ0n1GRh/QONCZMeiXFMHpTF5EFZR2w/WNfItn1VbN1X5byWVlFYVsPCrWXsXlZD8zEOs1Pj6d0j0V0S6JWWSK8eCfRO+3xbz9QEvB67zGU6jyULYzpYaoKPcf3TGdc//Qv7Gv0B9lTUUrS/hqIDNRTtr2FXeQ3FFXXsraxlRWE5pVV1NL8AIAKZyfFkpcTTMyWenqnx9ExJcF/j6ZmaQFZKPNmp8WQkx5OeFGe9uEy7WLIwJoJ8Xg+5mcnkZia3WKbBH2DfwTr2VtSxt6KW4so6SipqKa2qp/RgPWVV9azbU0lZVSkHqhtarCc1wUd6UhwZye6SFE96chwZSUeupyfFkZboo0ei85qa4MNniabbs2RhTJSL83rom55E3/SkoGUb/AH2V3+eRPYdrKO8poED1e5SU095dQMHahpYV15xeF9jkPk+kuO9pCb4SEv0kZZ4ZDJpuu1QmeR4HykJXlISfKTE+0iOd94n+DzWS6yLsmRhTAyJ83qcexxpiSEfo6pU1fvdxOEkk4raRiprG6isbXQX932d81pR20jRgZrD+2obAiF9ltcjTuJokkwOJaLDCSbeR7K7PSnOS9KhV/d9Ylyz7e5rnFcsEXUgSxbGdHMiQmqCc1bQPyP42cvRNPgDhxNHVZ2f6vpGqur9VNU1UlXXSHW9n4N1jc72Ov/hbVX1zv5dB2qprm/koHtsdb3/mGPweoSkODeZxHuOSDBNE01inJdEn5eEOA8JPg8JPi+Jcc5rgs9DQpynyX5nW2Lc5/ualu9OnQwsWRhj2i3O6yErxbnhHg6BgFLb6Kem3k9Ng5/aBj/V9Ueu1zT4qakPNNnfeMT6obI1DX5Kq+qp2e/UUdvgp74xQG2jnwZ/+x4d8HmkWTJp9urzEO/1EO9zF6+HOPc1wd0W5/18X3wr5ePd+uKa7Y/3ugmug7tcW7IwxkQdj0dIjncuTXUkf0CpbwxQ1+intsF5rWsMUNfgJJO6JttqGw7tc1+bbnPL1h6x309lbSMN/gD1jQHq3dcGv3PsoW3heNTtuAEZvPy9k9tfUSssWRhjui2vR5zLVBF6ql5VnYR1KKE0SSpHTS6NARr8Sr3f36S80jNMZ3StsWRhjDERIiL4vILP6yHax6O0ztPGGGOCsmRhjDEmqJgZSFBESoDtIRTNBvZ1cDidydoTvWKpLRBb7YmltkD72jNIVXOCFYqZZBEqESkIZYTFrsLaE71iqS0QW+2JpbZA57THLkMZY4wJypKFMcaYoLpjspgT6QDCzNoTvWKpLRBb7YmltkAntKfb3bMw5liJyEBgDZCuqsc+aFEnEJG/AUWq+ptIx2JiU3c8szDdkIjMFpGFIlIlIsXu++9KCMOUquoOVU2NVKIQkTdF5I6jbJ8lIntExKeqN1iiMB3JkoWJeSLyQ+B+4G6gD9AbuAE4GYjy52YBeBS46iiJ7SrgSVVt7PyQTHdjycLENBFJB+4Avquqz6tqpTqWquqVqlrnljtHRJaKSIWI7BSRXzWpI09EVER87vr7IvIbEZkvIpUi8paIZLfw+WtF5Nwm6z4R2Scix4tIoog8ISKlInJARBaJSO+jVPMSkAWc2qSeTOBc4HF3/VER+a37/jQRKRSRH7pnUbtF5Nr2/Uma7s6ShYl1JwEJwMtBylUBVwMZwDnAjSJyfivlrwCuBXrhnJ3c1kK5p4HLm6x/BdinqkuAa4B0YADQE+dsp6Z5BapaA8x14zvkUmCdqi5v4XP7uHX3B74FPOgmGGPaxJKFiXXZOF/Ohy/ViMgn7i/5GhGZDqCq76vqSlUNqOoKnC/5L7VS7z9UdUOTL/KJLZR7CjhPRA5Nsn2Fuw2gASdJDFNVv6ouVtWKFup5DLhERA7NTnS1u60lDcAdqtqgqq8BB4GRrZQ3plWWLEysKwWyD11CAlDVaaqa4e7zAIjICSIyT0RKRKQc51f+US8tufY0eV8NpB6tkKpuAtYCX3MTxnl8niz+CbwJPCMiu0TkLhGJa6Gej4ESYJaIDAGmNKnnqO1udi+jxRiNCYUlCxPrPgXqgFlByj0FvAIMUNV04G9AuObMPHQpahawxk0guL/6f62qY4BpOPcgrm65Gh53918FvKWqe8MUnzFBWbIwMU1VDwC/Bv4iIheLSKqIeERkIpDSpGgaUKaqtSIyFedyUbg8A3wZuJEmZwMicrqIjBcRL1CBc+mote65jwMzgOto/RKUMWFnycLEPFW9C7gV+DFQDOwFHgJuBz5xi30XuENEKoFf4NyHCNfn78Y5w5kGPNtkVx/geZxEsRb4AHiilXq2ufGm4JwFGdNp7AluY4wxQdmZhTHGmKAsWRhjjAnKkoUxxpigLFkYY4wJyhe8SOSIyEycAeC8wN9V9c6WymZnZ2teXl5nhWaMMTFh8eLF+0KZgztqk4Xb9/xB4CygEFgkIq+o6pqjlc/Ly6OgoKAzQzTGmC5PRLaHUi6aL0NNBTap6hZVrcd5sCnYU7jGGGM6QNSeWeCMlrmzyXohcELTAiJyPXA9wMCBAzsvMmOMCZGq4g8oflUCAfCr4vc76/6AEji0v8l755Uj96sSCHyxrkBASUv0kZ+X1aHtiOZkcbRxeY54glBV5+DOPZufn29PFxoTQwIBpSEQoMGvNDQGaPAHqPcHqG90t7nrDc3XD5cJUN/k2MPr/gD+QNNXxR8I0OhXGt0v48P7Akfuawwoje6+Q++d10P7A/ibvG8MKJ3x3PPEARm89L2TO/QzojlZFOKM839ILrArQrEYY3B+Jdc1Bqiu91NV10h1vZ+DdY1U1zdSVeenur6RmgY/dQ0Bahv91DYEqGt01xv81DU6r0e+d8ocUbbRT4O/Y75l470efF7B6xHivB68HsHnEXxewefx4PM4+5qvJ8V53WPc/Z7P63GOd8o23+4R5/3hRQSPR/AKeD2H3n/+2nSb1wNejwevh8/rOVS2Sd2pCd4O+bNqKpqTxSJguIgMBoqA2YR3cDdjup3aBj/lNQ0cqG5wX+spr2k4vByobqCitoGqus+//A+6SeFQcmgMHNuXeLzPQ6LPQ0Kcl8Q4D4k+Lwnua3K8j8xkD4lxzrYEn1smzku810O8z0O810OcV4jzeYjzeg5vj3O3x3s9zfaJu695eeeLNYRp181RRG2yUNVGEbkJZ7x/L/CIqq6OcFjGRBVVpbymgeLKOoor6iiurP3C+0MJ4UB1A3WNgRbrEoH0pDh6JMaRkuAjNcFLRnI8/TOTSIn3kZLgIzneS0qCj5R4L8kJPne79/C+5HgfSXFHfuF7PPblHAuiNlkAuDN8vRbpOIyJFFVl38F6tpdWsa20+vBr0f5qJylU1lF/lASQHO+lV1oCvdISGZydQkZSPOnJcaQnOUuG+z4jKd7ZlhxHWoLPvthNi6I6WRjTXQQCyvayalYWlbNudwXbS6vZVlrF9tJqDtZ9PuGdRyA3M5nczCSm5GXRKy2BnLQEevVIdJOD8z41wf5rm/Cyf1HGdDJVZXupkxhWFZWzorCcVbvKqax1koLPIwzMSmZQz2Sm5GWR1zOZQdkp5PVMoX9GEvG+aH48ysSqbp8sVJX1eyvJzUy2X2Omw+yvqufDjSV8sL6EDzeWsO9gPeD0zBndN43zjuvHhNx0xvfPYHjvVOK8lhBMdOn23477qxuYed9HAGQmxx0+xR+Q5bwO6pnC4J4p9M9MwmvXc02IVJXVuyp4d20x728oZvnOAwQUMpLjmD48hxOH9GRCbjojeqfZmYLpErqE/K+YAAAZY0lEQVR9skiM8/DAFZPYWVZD4f5qCvfXsH5vJe+uKz7ixmGcVxiQlczgnikMyUlheK80hvVOZVivVHokxkWwBSaaVNY28PKyXTz92Q5W76pABCb0T+emM4Zz2sgcjsvNsB8dpkvq9skiOd7HuRP6fWF7IKDsO1jH1n1VbCutYuu+ara57z/etO+ILoh9eiQyvHcqY/r2YEy/Hozu24Mh2Sn47FJCt7F85wGeWriDV5bvoqbBz6g+adwxayznjO9Lz9SESIdnTLt1+2TREo9HnB4mPRI5YUjPI/b5A0rh/mo27j3IxuKDbCyuZP2eSv4xfxv1fieJxPs8jO7bg4m56Rw3IIPjBmQwuGeKdU2MMRv3VvL7N9bxztpikuK8nHdcPy4/YSDH5abbw18mpoh2xsAlnSA/P18jPUR5gz/AlpIq1uwuZ82uClYWlbOysJyqej8AaYk+Jg/KZEpeFlMHZzEhN50EX8c/pm/Cr7iilnvf2cizi3aQEu/jhtOGcvVJg0izS5KmixGRxaqaH6ycnVmEUZzXw8g+aYzsk8YFk5xt/oCyueQgy3YeYOmO/Szatp/3168HnLOPKXmZnDIsh1OGZTO2Xw8784hyqsqjn2zj7jfX0+APcM20PG4+YzhZKfGRDs2YDmVnFhFQVlXPom1lfLa1jPmb9rFuTyUAWSnxnDYihxljejN9RI515Y0yB6rrue25Fbyzdi9njOrFL782hkE9UyIdljHtEuqZhSWLKFBcWcv8Tfv4YH0J89aXUF7TQLzXw0lDe3LuhL58eWwf0pPs8kYkFWwr45anl1JysI6ffHU0156cZ/ckTEywZNFFNfoDLN6+n3fW7uX1VXso3F9DvNfD9BHZXHR8LmeO7m398jvZK8t38YNnl9E/I4kHrpjEhNyMSIdkTNhYsogBqsrywnJeXb6LV1fsZk9FLZnJcZw/qT9XTB3I8N5pkQ4x5r2wpJDbnltOfl4Wf78m356pMTHHkkWM8QeUjzaW8NziQt5evZd6f4BpQ3tyzbQ8ZozubQ96dYC5i3Zy+wsrmDa0Jw9fnU9yvN1DMrHHkkUMKz1YxzOLdvLkgu3sKq9lcHYK35k+hAuO729dccPktZW7+e6TS5g+Ioc5V00mMc7+XE1ssmTRDTT6A7y5ei9/+2AzK4vK6d0jgZtOH8ZlUwbafY12WL+nkgv+Mp9RfdJ46roTLVGYmGbJohtRVT7etI8/vbuRRdv2k5uZxK1njeD8if3tuY1jVF7TwKwHPqaq3s+rN59C7x6JkQ7JmA4VarJo989PEfGIyCQROUdEzhCR3u2t0xwbEeHU4TnM/c5JPHrtFNKT4rh17nIu+OsnLNmxP9LhdRmqyg/nLqNwfw1/ufJ4SxTGNNHmO3YiMhS4HZgBbARKgERghIhUAw8Bj6lqy5P+mrASEU4b2Yvpw3N4cWkRv39jHRf+5RMuzc/lp2ePJiPZnjJuzYtLi3hnbTE/P2c0U/KyIh2OMVGlzZehRORp4K/AR9qsEhHpBVwB7FfVx9odZQi682WollTVNfKndzfy94+3kpkcx6/PG8c5E/pGOqyotL+qnjP/+AEDs5L5143TrHeZ6TY64zLU1ar6YfNEAaCqxap6X1sThYjcLSLrRGSFiLwoIvYUVBukJPj4ydmjeeWmk+mbnsT3nlrC959ZSnlNQ6RDizr/+9paKmoa+N2F4y1RGHMU7UkWRSLysHufItz/u94GxqnqBGAD8JMw19+tjO2XzovfncYPZozg3yt289X7PrR7GU0s3l7Gc4sL+fapQxjdt0ekwzEmKrUnWYwGCoD/BnaKyH0ickI4glLVt1S10V1dAOSGo97uzOf18F8zhjuXWLzCpX/7lP/7eCux0huuPe5+cz3ZqQnccuawSIdiTNRqc7JQ1VJVfUhVTwemAluB+0Rks4j8T9gihG8Crx9th4hcLyIFIlJQUlISxo+MXRMHZPDqTady+qhe/ObVNfxw7nJqG/yRDitiPtm0jwVbyvje6UPtCW1jWhGWJ7dUdRfwfzg3vCuBbwc7RkTeEZFVR1lmNSnzM6AReLKFz52jqvmqmp+TkxOOpnQL6clxzLlqMreeNYIXlhZx+cMLKD1YF+mwOp2qcs/bG+ibnsjlUwdGOhxjolq7koWIJIrIJSLyArAZOBPn/sIXJ7VuRlVnqOq4oywvu3VfA5wLXHm0m+imfUSEW84czl+vPJ41uyq46K+fsKO0OtJhdar5m0pZvH0/3zt9mD2lbUwQbU4WIvIUsBO4DHgKGKSq16jq66rarusaIjIT5xmO81S1e32DdbKvju/LU9edyIGaBi786yesdydi6g4emb+V7NR4Lsm3W2LGBNOeM4tVwBBVvVhVn1fV2nAFBTwApAFvi8gyEflbGOs2zUwelMnzN0zD64HZcz5lVVF5pEPqcNv2VTFvfTFXnDDIBl80JgTtSRYDgQ9E5BkR+YaI9AlXUKo6TFUHqOpEd7khXHWboxvWK5W53zmJ5HgfV/59Iat3xXbCePzT7XhFuPIEu1dhTCja0xvqBlU9HvgVkAk8KiKfisj/ish0EbGfa13MoJ4pPHP9iaTEe7nq/z5jw97YvCRVXd/Ic4t3cvb4vjb+kzEhandvKFVdp6r3qupM4AzgY+ASYGF76zadb0BWMk9ddyJej3DNI5+x60BNpEMKu7dW76WytpEr7KzCmJC15wb3f0TkShFJObRNVWtU9TVVvTmUsUZMdMrLTuGxa6dysLaRqx/5jPLq2Boe5F9LCsnNTGKqDRZoTMjac2YxB6dr61YReVZEzhcRG9Y0Rozp14OHr8lne2kVNz65mAZ/bAwevKe8lvmb9nHBJJvrw5hj0Z57Fi+r6uXAIOAF4Bpgh4g8IiJnhStAEzknDunJnRdO4JPNpfzyldWRDicsXl5WREDhgkn9Ix2KMV1KOO5Z1Kjqs6p6AfBlYBLwRrsjM1Hhosm53PCloTy1cAdPLdwR6XDa7d8rdnHcgAyG5KRGOhRjupRwzJTXW0RuFpH5wEvAW8DkdkdmosaPvjKSL43I4ZevrGLZzgORDqfNdpZVs6qogrPHha2XtzHdRntucF8nIu8BS4ARwI9VdYiq3q6qy8IWoYk4r0e4f/ZEeqUl8r0nl3Cguj7SIbXJm6v3ADDTkoUxx6w9ZxbTgDuBAW7vp/lhislEoYzkeP5y5fEUV9by4+dXdMmhzd9YtYfRfXswqGdK8MLGmCO0J1n82p134qjdZMRhg+7EkOMGZHD7zFG8tWYvT3ax+xcllXUs3rGfmWPtrMKYtmhPsrhbRP4lIleLyFgR6SUiA92Z834DzMeZIMnEkG+ePJhTh2fz2/+sYUvJwUiHE7IPNpSgCjPG9Ip0KMZ0Se3pOnsJzix5I4EHgY+Al3HmslgPnKGqb4cjSBM9PB7hD5ccR4LPy61zl9PYRZ6/mLeumF5pCYyxaVONaZN29YZS1TWq+jNVPU1VR6rqJFW9QlWfCPMotCaK9O6RyG/PH8eynQf4+8dbIx1OUA3+AB9uLOH0kb0I/3TxxnQPYZkpz3Q/507oy8yxffjj2xvYHOWXo5Zs309lbSOnj7LZFI1pK0sWpk1EhDvOH0uiz8NPXlhJIBC9vaM+3FiC1yNMG5Yd6VCM6bIsWZg265WWyM/OGc1nW8t4bvHOSIfToo837mPigAx6JMZFOhRjuqywJAsR6S8i09x5LKaLyPRw1Gui36X5A5g6OIvfvb6Osqroe1ivvLqBFUXlnGJnFca0SziG+/g9TjfZnwM/cpfb2luv6RpEhN+eP46DtY38/vV1kQ7nCz7ZvA9VOGW4JQtj2sMXhjrOB0aqal0Y6jJd0IjeaXzzlMHM+XALl58wkIkDMiId0mEfb9pHSrw3qmIypisKx2WoLYBdDO7mbj5jGDlpCfzyldVRdbP70y2lTBmcRZzXbs8Z0x7h+B9UDSwTkYdE5E+HljDUi4jcJiIqInYNIcqlJcZx+8xRLN95gJeWFUU6HAD2VtSypaSKk4b0jHQoxnR54bgM9Yq7hJWIDADOArrWIETd2IWT+vP4p9v4/RvrmDmuD8nx4fjn1XYLtpQCcNJQSxbGtFc4Jj967GhLGGK7F/gxED3XNEyrPB7hv88dw96KOh7+MPJPdi/YUkpaoo+x/dIjHYoxXV575rOY676uFJEVzZf2BCUi5wFFqro8SLnrRaRARApKSkra85EmTKbkZTFzbB8e+nAzxZWRHfFl4ZYypuZl4bW5to1pt/ZcJ/gv9/XcthwsIu8ARxsv+mfAT3GmaG2Vqs4B5gDk5+fbGUiUuP2ro3hn7V7uf2cj/3PB+IjEUFxRy5Z9VcyeOiAin29MrGlzslDV3e7r9jYeP+No20VkPDAYWO4O+pYLLBGRqaq6p43hmk40ODuFK04YyJMLd/CtUwZHZL7rhVvLADhhsN2vMCYcwvFQ3okiskhEDopIvYj4RaSirfWp6kpV7aWqeaqaBxQCx1ui6FpuPmM4CT4P97y1ISKfv3BrKSnxXsb2syHJjQmHcHSdfQC4HNgIJOHMZ/HnMNRrurCctAS+feoQ/rNyNysLyzv98z/bWsbkvCx89nyFMWERlv9JqroJ8KqqX1X/AZwejnrduvNUdV+46jOd57pTB5ORHMfdb63v1M8tq6pnw96DnDA4q1M/15hYFpaH8kQkHufBvLtE5AdAShjqNV1cWmIc3z1tKB9uKGGh+8xDZ1i07dD9CksWxoRLOJLFVW49NwFVwADgojDUa2LA1Sfl0SstgXve2oBq53RY+2xrGQk+D+Nz7fkKY8IlHA/lbVfVWlWtUNVfq+qt7mUpY0iM83LzGcP4bFsZH23snKuJC7eWMmlgBgk+b6d8njHdQXseypslIt9rsr5QRLa4y8XhCc/EgkunDKB/RhL3vLW+w88uKmobWLOrwrrMGhNm7Tmz+DFHjgmVAEwBTgNubEe9JsYk+Jyzi+WF5by3rrhDP2vxtv0EFE4YYvcrjAmn9iSLeFVtOpfmx6paqqo7sBvcppmLJucyqGdyh9+7WLCllDivcPzAzA77DGO6o/YkiyP+N6rqTU1Wc9pRr4lBcV4Pt5wxnDW7K3hzdcc9X7lgSymTBmSSGGf3K4wJp/Yki4Uicl3zjSLyHeCzdtRrYtSsif0Ykp3CvW9v7JAJkipqG1hZVM6JdgnKmLBrT7L4AXCtiMwTkXvc5X3gG8D3wxGciS0+r4f/mjGc9Xsr+c/K3WGvf9HWMgIKJ9pkR8aEXZuThaoWq+o04DfANne5Q1VPUtW94QnPxJpzJ/RjeK9U7n1nA43+QFjrnr+plASfh+MH2f0KY8ItHM9ZvKeqf3aX98IRlIldXo9w61kj2FJSxcvLdoW17vmb9jElL8vuVxjTAWyUNdPpvjK2D2P79eC+dzdQ3xies4viylrW761k2jC7BGVMR7BkYTqdxyPc9uWR7CyrYW7BzuAHhOCjDc7T4dOHW0c8YzqCJQsTEaeNzCF/UCZ/encjNfX+dtf3wYYSslMTGNPX5q8wpiNYsjARISL8eOYoiivr+McnW9tVV6M/wIcbS5g+IhuPzbdtTIewZGEiZurgLM4Y1Yu/vr+Z/VX1ba5n8fb9HKhu4KzRvcMYnTGmKUsWJqJunzmKqrpG/vxe2wcqfnvNXuK9Hk4dYfcrjOkolixMRI3sk8al+QN4/NNtbC45eMzHqyqvr9rDKcOzSU3whT9AYwxgycJEgR9+eSSJcV5+8+qaYx5kcMmOAxQdqOHcCX07KDpjDFiyMFEgJy2B788YzvvrS3hn7bENYf7i0kISfB7OGmP3K4zpSJYsTFS4ZloeI3qn8suXV1FV1xjSMbUNfl5ZtouvjutDWmJcB0doTPcWtclCRG4WkfUislpE7op0PKZjxXk9/O7C8eyuqOV3r68N6ZiXlhZRUdvIZVMGdnB0xpioTBYicjowC5igqmOBP0Q4JNMJJg/K4psnD+aJBTuYF2RGPX9AmfPRFsb07WFDkhvTCaIyWeBMy3qnqtaBM8JthOMxneRHXxnJqD5p/GDuMgr3V7dY7l9LCtlSUsXNZwxDxB7EM6ajRWuyGAGcKiILReQDEZlytEIicr2IFIhIQUlJSSeHaDpCYpyXv1x5PP6A8s1HF1F2lIf19h2s487X1zFpYAYzx/WJQJTGdD8RSxYi8o6IrDrKMgvw4UzbeiLwI2CuHOXno6rOUdV8Vc3PybEHsmLFkJxUHrpqMttKq5k951N2lH5+hnGwrpEbn1hMVV0jv7twvJ1VGNNJIvYUk6rOaGmfiNwIvKBOp/vPRCQAZAN2+tBNTBuazaPXTuGGfy7mK/d9yPmT+tMrLYEXlxZRdKCG+2dPZFQfGzTQmM4SrY+8vgScAbwvIiOAeGBfZEMynW3a0Gxe//507nlzPS8tLaKmwc+E3HTuuniCTZ1qTCeTY31itjOISDzwCDARqAduCzYLX35+vhYUFHRGeCYCAgGlIRAgwWez4BkTTiKyWFXzg5WLyjMLVa0Hvh7pOEz08HiEBI8lCmMiJVp7QxljjIkiliyMMcYEFZX3LNpCREqA7SEUzSa2bpZbe6JXLLUFYqs9sdQWaF97Bqlq0GcPYiZZhEpECkK5mdNVWHuiVyy1BWKrPbHUFuic9thlKGOMMUFZsjDGGBNUd0wWcyIdQJhZe6JXLLUFYqs9sdQW6IT2dLt7FsYYY45ddzyzMMYYc4wsWRhjjAkqZpOFiMx0p2XdJCL/r5VyF4uIikhUd6ML1h4R+YaIlIjIMnf5diTiDEUofzcicqmIrHGn1X2qs2M8FiH83dzb5O9lg4gciEScoQqhPQNFZJ6ILBWRFSJydiTiDEUIbRkkIu+67XhfRHIjEWcoROQRESkWkVUt7BcR+ZPb1hUicnxYA1DVmFsAL7AZGIIzYu1yYMxRyqUBHwILgPxIx92e9gDfAB6IdKxhastwYCmQ6a73inTc7f231qT8zcAjkY67nX8/c4Ab3fdjgG2RjrsdbXkOuMZ9fwbwz0jH3Up7pgPHA6ta2H828DogOHMBLQzn58fqmcVUYJOqblFnUMJncOb0bu43wF1AbWcG1wahtqcrCKUt1wEPqup+iPppdY/17+Zy4OlOiaxtQmmPAocmE0kHdnVifMcilLaMAd513887yv6ooaofAmWtFJkFPK6OBUCGiPQN1+fHarLoD+xssl7objtMRCYBA1T11c4MrI2Ctsd1kXv6+byIDOic0I5ZKG0ZAYwQkfkiskBEZnZadMcu1L8bRGQQMBhodbj9CAulPb8Cvi4ihcBrOGdL0SiUtiwHLnLfXwCkiUhXnSwl5H+LbRGryeJoc20e7iMsIh7gXuCHnRZR+7TaHte/gTxVnQC8AzzW4VG1TSht8eFcijoN55f430Uko4PjaqtQ2nPIbOB5VfV3YDztFUp7LgceVdVcnEsf/3T/T0WbUNpyG/AlEVkKfAkoAho7OrAOciz/Fo9ZNP4Fh0Mh0PSXdS5HniqnAeNwZuLbhnN975UovskdrD2oaqmq1rmrDwOTOym2YxW0LW6Zl1W1QVW3Autxkkc0CqU9h8wmui9BQWjt+RYwF0BVPwUScQayizah/L/ZpaoXquok4GfutvLOCzGsjuXf4jGL1WSxCBguIoPdWfdmA68c2qmq5aqarap5qpqHc4P7PFWN1qn2Wm0PQLNrk+cBazsxvmMRtC040+qeDiAi2TiXpbZ0apShC6U9iMhIIBP4tJPjO1ahtGcHcCaAiIzGSRYlnRplaEL5f5Pd5KzoJzgzdHZVrwBXu72iTgTKVXV3uCqPypny2ktVG0XkJuBNnB4Rj6jqahG5AyhQ1S/8Z45mIbbnFhE5D+cUugynd1TUCbEtbwJfFpE1gB/4kaqWRi7qlh3Dv7XLgWfU7bYSrUJszw+Bh0XkBziXOb4Rje0KsS2nAb8TEcXpGfm9iAUchIg8jRNvtnu/6JdAHICq/g3n/tHZwCagGrg2rJ8fhX/HxhhjokysXoYyxhgTRpYsjDHGBGXJwhhjTFCWLIwxxgRlycIYY0xQliyMCcIdjfQrzbZ9X0T+IiL9ROT5NtT5vIgMEZFHReQ7zfadLyKviUi8iHwoIjHZxd10LZYsjAnuaZwHupqaDTztPgF88bFUJiJjAa+qbglSdz3OIHeXtS1sY8LHkoUxwT0PnCsiCQAikgf0Az4WkbxD8wuIM6fICyLyhohsFJG7WqjvSuBl9/07wKhDT+CLSDIwA+cpdtzXKzugTcYcE0sWxgThPj3+GXBo9NvZwLMtPLU8EedMYDxwWQuj/54MLHbr9gMvAJe6+84D5qlqpbu+CpgSjnYY0x6WLIwJTdPLRa0NCPiuO/ZYLbAGGHSUMn05ciylFut2k0m9iKS1I3Zj2s2ShTGheQk4052qMklVl7RQrq7Jez9HH3+tBmfwvUPmA31F5DhgGs4YP00lEP0TdJkYZ8nCmBCo6kHgfZxRSds7zPhaYFiTuhVnyO/HgNfcsxIA3Il4SlS1oZ2faUy7WLIwJnRPA8fhTM/ZHv/BGT00lLpP54tnGsZ0Oht11phOJiJJOPM9nxxs1jwReQH4iaqu75TgjGmBnVkY08lUtQZnLoJW50d2J+x5yRKFiQZ2ZmGMMSYoO7MwxhgTlCULY4wxQVmyMMYYE5QlC2OMMUFZsjDGGBPU/wfK4aCNOtcKoQAAAABJRU5ErkJggg==\n",
-      "text/plain": [
-       "<Figure size 432x288 with 2 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 2 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%matplotlib inline\n",
-    "\n",
-    "import os\n",
-    "\n",
-    "# import bag package\n",
-    "import bag\n",
-    "from bag.io import read_yaml\n",
-    "\n",
-    "# import BAG demo Python modules\n",
-    "import xbase_demo.core as demo_core\n",
-    "import xbase_demo.demo_layout.core as layout_core\n",
-    "\n",
-    "# load circuit specifications from file\n",
-    "spec_fname = os.path.join(os.environ['BAG_WORK_DIR'], 'specs_demo/demo.yaml')\n",
-    "top_specs = read_yaml(spec_fname)\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "\n",
-    "demo_core.run_flow(bprj, top_specs, 'amp_cs', layout_core.AmpCS, run_lvs=True)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "   ## Conclusion\n",
-    "   Congratulations!  You successfully walk through a BAG design flow.  In the following modules we will learn how to write simple layout and schematic generators in BAG."
-   ]
-  }
- ],
- "metadata": {
-  "anaconda-cloud": {},
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.5"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/workspace_setup/tutorial_files/2_xbase_routing.ipynb b/workspace_setup/tutorial_files/2_xbase_routing.ipynb
deleted file mode 100644
index 3f13bb1..0000000
--- a/workspace_setup/tutorial_files/2_xbase_routing.ipynb
+++ /dev/null
@@ -1,285 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Module 2: XBase Routing API\n",
-    "In this module, you will learn the basics about the routing grid system in XBase.  We will go over how tracks are defined, how to create wires, vias and pins, and how to define the size of a layout cell."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## XBase Routing Grid\n",
-    "\n",
-    "```yaml\n",
-    "routing_grid:\n",
-    "    layers: [4, 5, 6, 7]\n",
-    "    spaces: [0.06, 0.1, 0.12, 0.2]\n",
-    "    widths: [0.06, 0.1, 0.12, 0.2]\n",
-    "    bot_dir: 'x'\n",
-    "```\n",
-    "In XBase, all wires and vias have to be drawn on the routing grid, which is usually defined in a specification file, as shown above.  On each layer, all wires must travel in the same direction (horizontal or vertical), and wire direction alternates between each layers.  The routing grid usually starts on an intermediate layer (metal 4 in the above example), and lower layers are reserved for device primitives routing.  As seen above, different layers can define different wire pitch, with the wire pitch generally increasing as you move up the metal stack.\n",
-    "\n",
-    "All layout cell dimensions in XBase must also be quantized to the routing grid, meaning that a layout cell must contain integer number of tracks on all metal layers it uses.  Because of the difference in wire pitch, a layout cell that use more layers generally have coarser quantization compared with a layout cell that use fewer layers."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## XBase Routing Tracks\n",
-    "\n",
-    "<img src=\"bootcamp_pics/2_xbase_routing/xbase_routing_1.PNG\"  alt=\"Drawing\" style=\"width: 300px\"/>\n",
-    "The figure above shows some wires drawn in XBase.  Track pitch is the sum of unit width and space, and track number 0 is defined as the wire that's half-pitch away from left or bottom boundary.  From the figure, you can see spacing between wires follows the formula $S = sp + N \\cdot p$, where $N$ is the number of tracks in between.\n",
-    "\n",
-    "<img src=\"bootcamp_pics/2_xbase_routing/xbase_routing_2.PNG\"  alt=\"Drawing\" style=\"width: 400px\"/>\n",
-    "XBase also supports drawing thicker wires by using multiple adjacent tracks.  Wire width follows the formula $W = w + (N - 1)\\cdot p$, where $N$ is the number of tracks a wire uses.  One issue with this scheme is that even width wires wastes more space compared to odd width wires.  For example, in the above figure, although tracks 1 and 3 are empty, no wire can be drawn there because it will violate minimum spacing rule to the wire centered on track 2.  As a result, the wire on track 2 takes up 3 tracks although it is only 2 tracks wide.\n",
-    "\n",
-    "<img src=\"bootcamp_pics/2_xbase_routing/xbase_routing_3.PNG\"  alt=\"Drawing\" style=\"width: 400px\"/>\n",
-    "To work around this issues, XBase allows you to place wires on half-integer tracks.  In the above figure, the 2 tracks wide wire is moved to track 1.5 from track 2, and thus wires can still be drawn on tracks 0 and 3, making the layout more space efficient.  As an added benefit, track -0.5 is now on top of the left-most/bottom-most boundary, so it is now possible to share a wire with adjacent layout cells, such as supply wires in a custom digital standard cell."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## TrackID and WireArray\n",
-    "```python\n",
-    "class TrackID(object):\n",
-    "    def __init__(self, layer_id, track_idx, width=1, num=1, pitch=0.0):\n",
-    "        #type: (int, Union[float, int], int, int, Union[float, int]) -> None\n",
-    "        \n",
-    "class WireArray(object):\n",
-    "    def __init__(self, track_id, lower, upper):\n",
-    "        #type: (TrackID, float, float) -> None\n",
-    "```\n",
-    "\n",
-    "Routing track locations are represented by the `TrackID` Python object.  It has built-in support for drawing a multi-wire bus by specifying the optional `num` and `pitch` parameters, which defines the number of wires in the bus and the number of track pitches between adjacent wires.  The `layer_id` parameter specifies the routing layer ID, the `track_idx` parameter specifies the track index of the left-most/bottom-most wire, and `width` specifies the number of tracks a single wire uses.\n",
-    "\n",
-    "Physical wires in XBase are represented by the `WireArray` Python object.  It contains a `TrackID` object describes the location of the wires, and `lower` and `upper` attributes describes the starting and ending coordinate of those wires along the track.  For example, a horizontal wire starting at $x = 0.5$ um and ending at $x = 3.0$ um will have `lower = 0.5`, and `upper = 3.0`.\n",
-    "\n",
-    "One last note is that layout pins can only be added on `WireArray` objects.  This guarantees that pins of a layout cell will always be on the routing grid."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## BAG Layout Generation Code\n",
-    "```python\n",
-    "def gen_layout(prj, specs, dsn_name, demo_class):\n",
-    "    # get information from specs\n",
-    "    dsn_specs = specs[dsn_name]\n",
-    "    impl_lib = dsn_specs['impl_lib']\n",
-    "    layout_params = dsn_specs['layout_params']\n",
-    "    gen_cell = dsn_specs['gen_cell']\n",
-    "\n",
-    "    # create layout template database\n",
-    "    tdb = make_tdb(prj, specs, impl_lib)\n",
-    "    # compute layout\n",
-    "    print('computing layout')\n",
-    "    # template = tdb.new_template(params=layout_params, temp_cls=temp_cls)\n",
-    "    template = tdb.new_template(params=layout_params, temp_cls=demo_class)\n",
-    "\n",
-    "    # create layout in OA database\n",
-    "    print('creating layout')\n",
-    "    tdb.batch_layout(prj, [template], [gen_cell])\n",
-    "    # return corresponding schematic parameters\n",
-    "    print('layout done')\n",
-    "    return template.sch_params\n",
-    "```\n",
-    "The above code snippet (taking from `xbase_demo.core` module) shows how layout is generated.  First, user create a layout database object, which keeps track of layout hierarchy.  Then, user uses the layout database object to create new layout instances given layout generator class and parameters.  Finally, layout database uses `BagProject` instance to create the generated layouts in Virtuoso.  The generated layout will also contain the corresponding schematic parameters, which can be passed to schematic generator later."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## BAG TemplateDB Creation Code\n",
-    "```python\n",
-    "def make_tdb(prj, specs, impl_lib):\n",
-    "    grid_specs = specs['routing_grid']\n",
-    "    layers = grid_specs['layers']\n",
-    "    spaces = grid_specs['spaces']\n",
-    "    widths = grid_specs['widths']\n",
-    "    bot_dir = grid_specs['bot_dir']\n",
-    "\n",
-    "    # create RoutingGrid object\n",
-    "    routing_grid = RoutingGrid(prj.tech_info, layers, spaces, widths, bot_dir)\n",
-    "    # create layout template database\n",
-    "    tdb = TemplateDB('template_libs.def', routing_grid, impl_lib, use_cybagoa=True)\n",
-    "    return tdb\n",
-    "```\n",
-    "For reference, the above code snippet shows how the layout database object is created.  A `RoutingGrid` object is created from routing grid parameters specified in the specification file, which is then used to construct the `TemplateDB` layout database object."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Routing Example\n",
-    "\n",
-    "The code box below defines a `RoutingDemo` layout generator class, which is a simply layout containing only wires, vias, and pins.  All layout creation happens in the `draw_layout()` function, the functions/attributes of interests are:\n",
-    "\n",
-    "* `add_wires()`:  Create one or more physical wires, with the given options.\n",
-    "* `connect_to_tracks()`: Connect two `WireArray`s on adjacent layers by extending them to their intersection and adding vias.\n",
-    "* `connnect_wires()`: Connect multiple `WireArrays` on the same layer together.  \n",
-    "* `add_pin()`: Add a pin object on top of a `WireArray` object.\n",
-    "* `self.size`: A 3-tuple describing the size of this layout cell.\n",
-    "* `self.bound_box`: A `BBox` object representing the bounding box of this layout cell, computed from `self.size`.\n",
-    "\n",
-    "To see the layout in action, evaluate the code box below by selecting the cell and pressing Ctrl+Enter.  A `DEMO_ROUTING` library will be created in Virtuoso with a single `ROUTING_DEMO` layout cell in it.  Feel free to play around with the numbers and re-evaluating the cell, and the layout in Virtuoso should update.\n",
-    "\n",
-    "Exercise 1: There are currently 3 wires labeled \"pin3\".  Change that to 4 wires by adding an extra wire with the same pitch on the right.\n",
-    "\n",
-    "Exercise 2: Connect all wires labeled \"pin3\" to the wire labeled \"pin1\".  Hint: use `connect_to_tracks()` and `connect_wires()`."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "using existing BagProject\n",
-      "computing layout\n",
-      "WireArray(TrackID(layer=4, track=0), 0.1, 0.3)\n",
-      "0.1 0.2 0.3\n",
-      "TrackID(layer=4, track=0)\n",
-      "WireArray(TrackID(layer=5, track=6, num=3, pitch=2), 0.1, 0.4)\n",
-      "WireArray(TrackID(layer=5, track=3, width=2), 0.042, 0.75)\n",
-      "BBox(0.000, 0.000, 1.980, 0.864)\n",
-      "creating layout\n",
-      "layout done\n"
-     ]
-    }
-   ],
-   "source": [
-    "from bag.layout.routing import TrackID\n",
-    "from bag.layout.template import TemplateBase\n",
-    "\n",
-    "\n",
-    "class RoutingDemo(TemplateBase):\n",
-    "    def __init__(self, temp_db, lib_name, params, used_names, **kwargs):\n",
-    "        super(RoutingDemo, self).__init__(temp_db, lib_name, params, used_names, **kwargs)\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        return {}\n",
-    "\n",
-    "    def draw_layout(self):\n",
-    "        # Metal 4 is horizontal, Metal 5 is vertical\n",
-    "        hm_layer = 4\n",
-    "        vm_layer = 5\n",
-    "\n",
-    "        # add a horizontal wire on track 0, from X=0.1 to X=0.3\n",
-    "        warr1 = self.add_wires(hm_layer, 0, 0.1, 0.3)\n",
-    "        # print WireArray object\n",
-    "        print(warr1)\n",
-    "        # print lower, middle, and upper coordinate of wire.\n",
-    "        print(warr1.lower, warr1.middle, warr1.upper)\n",
-    "        # print TrackID object associated with WireArray\n",
-    "        print(warr1.track_id)\n",
-    "\n",
-    "        # add a horizontal wire on track 1, from X=0.1 to X=0.3,\n",
-    "        # coordinates specified in resolution units\n",
-    "        warr2 = self.add_wires(hm_layer, 1, 100, 300, unit_mode=True)\n",
-    "\n",
-    "        # add another wire on track 1, from X=0.35 to X=0.45\n",
-    "        warr2_ext = self.add_wires(hm_layer, 1, 350, 450, unit_mode=True)\n",
-    "        # connect wires on the same track, in this case warr2 and warr2_ext\n",
-    "        self.connect_wires([warr2, warr2_ext])\n",
-    "        \n",
-    "        # add a horizontal wire on track 2.5, from X=0.2 to X=0.4\n",
-    "        self.add_wires(hm_layer, 2.5, 200, 400, unit_mode=True)\n",
-    "        # add a horizontal wire on track 4, from X=0.2 to X=0.4, with 2 tracks wide\n",
-    "        warr3 = self.add_wires(hm_layer, 4, 200, 400, width=2, unit_mode=True)\n",
-    "\n",
-    "        # add 3 parallel vertical wires starting on track 6 and use every other track\n",
-    "        warr4 = self.add_wires(vm_layer, 6, 100, 400, num=3, pitch=2, unit_mode=True)\n",
-    "        print(warr4)\n",
-    "        \n",
-    "        # create a TrackID object representing a vertical track\n",
-    "        tid = TrackID(vm_layer, 3, width=2, num=1, pitch=0)\n",
-    "        # connect horizontal wires to the vertical track\n",
-    "        warr5 = self.connect_to_tracks([warr1, warr3], tid)\n",
-    "        print(warr5)\n",
-    "\n",
-    "        # add a pin on a WireArray\n",
-    "        self.add_pin('pin1', warr1)\n",
-    "        # add a pin, but make label different than net name.  Useful for LVS connect\n",
-    "        self.add_pin('pin2', warr2, label='pin2:')\n",
-    "        # add_pin also works for WireArray representing multiple wires\n",
-    "        self.add_pin('pin3', warr4)\n",
-    "        # add a pin (so it is visible in BAG), but do not create the actual layout\n",
-    "        # in OA.  This is useful for hiding pins on lower levels of hierarchy.\n",
-    "        self.add_pin('pin4', warr3, show=False)\n",
-    "\n",
-    "        # set the size of this template\n",
-    "        top_layer = vm_layer\n",
-    "        num_h_tracks = 6\n",
-    "        num_v_tracks = 11\n",
-    "        # size is 3-element tuple of top layer ID, number of top\n",
-    "        # vertical tracks, and number of top horizontal tracks\n",
-    "        self.size = top_layer, num_v_tracks, num_h_tracks\n",
-    "        # print bounding box of this template\n",
-    "        print(self.bound_box)\n",
-    "        # add a M7 rectangle to visualize bounding box in layout\n",
-    "        self.add_rect('M7', self.bound_box)\n",
-    "        \n",
-    "\n",
-    "import os\n",
-    "\n",
-    "# import bag package\n",
-    "import bag\n",
-    "from bag.io import read_yaml\n",
-    "\n",
-    "# import BAG demo Python modules\n",
-    "import xbase_demo.core as demo_core\n",
-    "\n",
-    "# load circuit specifications from file\n",
-    "spec_fname = os.path.join(os.environ['BAG_WORK_DIR'], 'specs_demo/demo.yaml')\n",
-    "top_specs = read_yaml(spec_fname)\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "\n",
-    "demo_core.routing_demo(bprj, top_specs, RoutingDemo)"
-   ]
-  }
- ],
- "metadata": {
-  "anaconda-cloud": {},
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.3"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/workspace_setup/tutorial_files/3_analogbase.ipynb b/workspace_setup/tutorial_files/3_analogbase.ipynb
deleted file mode 100644
index d6c0215..0000000
--- a/workspace_setup/tutorial_files/3_analogbase.ipynb
+++ /dev/null
@@ -1,662 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# AnalogBase\n",
-    "In this module, you will learn the basics of `AnalogBase`, and how to design a source-follower layout generator using AnalogBase.\n"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## What is AnalogBase?\n",
-    "<img src=\"bootcamp_pics/3_analogbase/analogbase_1.PNG\" alt=\"Drawing\" style=\"width: 200px;\" />\n",
-    "`AnalogBase` is one of several \"layout floorplan\" classes that allows designers to easily develop process-portable layout generator for various electromigration-constrained circuits.  To do so, `AnalogBase` draws rows of transistors with substrate contacts on the top-most and bottom-most rows, as shown in the figure above.  In this floorplan, the number of current-carrying wires scales naturally with number of fingers, which is optimal for circuits with large bias currents.\n",
-    "\n",
-    "By convention, `AnalogBase` draws $N$ rows of NMOS (labeled as `nch`) and $P$ rows of PMOS (labeled as `pch`), with $N$ and $P$ being nonnegative integers, so you can only draw NMOS rows by setting $P=0$, and so on.  The rows are indexed from bottom to top, so `nch(N-1)` is the top-most NMOS row, and `pch0` is the bottom-most PMOS row.\n"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Transistor Source/Drain Naming Convention\n",
-    "<img src=\"bootcamp_pics/3_analogbase/analogbase_3.PNG\" alt=\"Drawing\" style=\"width: 600px;\"/>\n",
-    "Before we talk about how `AnalogBase` draws transistor connections, we need to establish a naming convention for source/drain junctions of a transistor, since source and drain are often interchangeable.  In XBase, the left-most source/drain junction of a transistor is always called \"source\", and after that source and drain alternates between each other, as shown in the above figure.  This implies that for even number of fingers, the right-most junction is always \"source\", and for odd number of fingers, the left-most junction is always \"drain\"."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## AnalogMosConn Overview\n",
-    "<img src=\"bootcamp_pics/3_analogbase/analogbase_2.PNG\" alt=\"Drawing\" style=\"width: 600px;\"/>\n",
-    "To connect transistors to the routing grid, `AnalogBase` \"drops\" `AnalogMosConn`, a layout cell consisting only of wires and vias, on top of desired transistors to connect gates, sources, and drains to a vertical routing layer.  For most technologies, `AnalogMosConn` draws gate, drain, and source wires on every other source/drain junction, with drain and source wires interleaving with each other.  By default, the gate wires are drawn below the transistor row, to draw gate wires above the transistor row, flip the row upside down by changing the row orientation from `R0` to `MX` (we will see an example of this later).\n",
-    "\n",
-    "With this layout style, the gate wires can either be drawn in the same tracks as source wires (\"G aligned to S\"), or they can be drawn in the same tracks as drain wires (\"G aligned to D\"). The gate wire location is usually determined by source/drain wire direction.  For example, in the figure above, if the source of a transistor needs to be connected to the row below it, then gate wires cannot be aligned to source, as this will cause a short between gate and source wires when the source wires is extended downwards.  Because of this, when creating a `AnalogMosConn`, designer needs to specify the drain and source wire directions (whether they go \"up\" or \"down\"), and the gate wire locations will be determined automatically to avoid shorts."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Connecting to Horizontal Tracks\n",
-    "<img src=\"bootcamp_pics/3_analogbase/analogbase_4.PNG\" alt=\"Drawing\" style=\"width: 300px;\"/>\n",
-    "In the previous section, we see that `AnalogMosConn` connects the transistor to vertical tracks.  How do we connect those vertical wires to the horizontal tracks above it?  If you recall from the previous module, you would need to use the `connect_to_tracks()` method with the horizontal track index.  The question now becomes: how do I know which track index can be used for gate/drain/source connections?\n",
-    "\n",
-    "To get a better understanding of this problem, consider the layout shown in the figure above.  The PMOS drain wires can be easily connected to track 10 with no issues, but the PMOS gate wires cannot be connected to track 10 without shorting with drain wires.  In fact, the PMOS gate wires can only be connected to tracks 5, 6, and 7 without running into minimum line-end spacing rules with other wires.  How can we determine what the legal track indices are?  Furthermore, if our particular circuit requires more than 3 horizontal tracks for PMOS gate connections, how can we tell `AnalogBase` to space the rows further apart?\n",
-    "\n",
-    "<img src=\"bootcamp_pics/3_analogbase/analogbase_5.PNG\"  alt=\"Drawing\" style=\"width: 300px;\"/>\n",
-    "To address these issues, `AnalogBase` introduces the concept of relative track indices, as shown in the figure above.  `AnalogBase` categorizes each horizontal tracks by the transistor row it belongs to, and by whether it can be connected to the gate/drain/source wires without DRC errors.  \n",
-    "\n",
-    "In each row, `g0` is the horizontal track furthest from the transistor row that can be connected to the gate wires without errors, and the index increases as the wire moves closer to the transistor.  `ds0` is the horizontal track closest to the transistor row (perhaps on top of it) that can be connected to the drain/source wires without errors, and the index increases as the wire moves away from the transistor.\n",
-    "\n",
-    "`AnalogBase` provides two methods to convert relative track indices to absolute track numbers, which can then be passed to `connect_to_tracks()` method to draw the connections.  Using the figure above as an example, `self.get_track_index('pch', 0, 'g', 1)` will returns the track number of the horizontal track at PMOS row 0, gate type, index 1, which is track number 5.  `self.make_track_id('pch', 0, 'g', 1)` will return the corresponding `TrackID` object instead.\n",
-    "\n",
-    "Finally, designer can specify the number of horizontal tracks needed for gate/drain/source connections on each row, and `AnalogBase` will automatically move rows further apart if necessary."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## CS Amplifier Layout Example\n",
-    "<img src=\"bootcamp_pics/3_analogbase/analogbase_6.PNG\" alt=\"Drawing\" style=\"width: 400px;\"/>\n",
-    "Now that you have a general idea of how `AnalogBase` works, lets walk through a common-source amplifier example.  The figure above shows a rough sketch of the layout floorplan (**NOTE: ALWAYS DRAW FLOORPLAN BEFORE CODING!**).  We have one NMOS row on the bottom, one PMOS row on the top, and we put extra dummy transistors on both sides to reduce edge layout effects.  The input connects to NMOS gates from below the NMOS row, the PMOS bias connects to PMOS gates from above the PMOS row, and the output drain/source of NMOS/PMOS are connected to a horizontal track between the two rows.  Finally, the supply drain/source wires are extended and shorted on top of the substrate contacts on both ends.\n",
-    "\n",
-    "The entire common-source amplifier layout generator code is reproduced below.  We will walk through important sections of the code and describe what they do.\n",
-    "\n",
-    "```python\n",
-    "class AmpCS(AnalogBase):\n",
-    "    \"\"\"A common source amplifier.\"\"\"\n",
-    "    def __init__(self, temp_db, lib_name, params, used_names, **kwargs):\n",
-    "        AnalogBase.__init__(self, temp_db, lib_name, params, used_names, **kwargs)\n",
-    "        self._sch_params = None\n",
-    "\n",
-    "    @property\n",
-    "    def sch_params(self):\n",
-    "        return self._sch_params\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        \"\"\"Returns a dictionary containing parameter descriptions.\n",
-    "\n",
-    "        Override this method to return a dictionary from parameter names to descriptions.\n",
-    "\n",
-    "        Returns\n",
-    "        -------\n",
-    "        param_info : dict[str, str]\n",
-    "            dictionary from parameter name to description.\n",
-    "        \"\"\"\n",
-    "        return dict(\n",
-    "            lch='channel length, in meters.',\n",
-    "            w_dict='width dictionary.',\n",
-    "            intent_dict='intent dictionary.',\n",
-    "            fg_dict='number of fingers dictionary.',\n",
-    "            ndum='number of dummies on each side.',\n",
-    "            ptap_w='NMOS substrate width, in meters/number of fins.',\n",
-    "            ntap_w='PMOS substrate width, in meters/number of fins.',\n",
-    "            show_pins='True to draw pin geometries.',\n",
-    "        )\n",
-    "\n",
-    "    def draw_layout(self):\n",
-    "        \"\"\"Draw the layout of a transistor for characterization.\n",
-    "        \"\"\"\n",
-    "\n",
-    "        lch = self.params['lch']\n",
-    "        w_dict = self.params['w_dict']\n",
-    "        intent_dict = self.params['intent_dict']\n",
-    "        fg_dict = self.params['fg_dict']\n",
-    "        ndum = self.params['ndum']\n",
-    "        ptap_w = self.params['ptap_w']\n",
-    "        ntap_w = self.params['ntap_w']\n",
-    "        show_pins = self.params['show_pins']\n",
-    "\n",
-    "        fg_amp = fg_dict['amp']\n",
-    "        fg_load = fg_dict['load']\n",
-    "\n",
-    "        if fg_load % 2 != 0 or fg_amp % 2 != 0:\n",
-    "            raise ValueError('fg_load=%d and fg_amp=%d must all be even.' % (fg_load, fg_amp))\n",
-    "\n",
-    "        # compute total number of fingers in each row\n",
-    "        fg_half_pmos = fg_load // 2\n",
-    "        fg_half_nmos = fg_amp // 2\n",
-    "        fg_half = max(fg_half_pmos, fg_half_nmos)\n",
-    "        fg_tot = (fg_half + ndum) * 2\n",
-    "\n",
-    "        # specify width/threshold of each row\n",
-    "        nw_list = [w_dict['amp']]\n",
-    "        pw_list = [w_dict['load']]\n",
-    "        nth_list = [intent_dict['amp']]\n",
-    "        pth_list = [intent_dict['load']]\n",
-    "\n",
-    "        # specify number of horizontal tracks for each row\n",
-    "        ng_tracks = [1]  # input track\n",
-    "        nds_tracks = [1]  # one track for space\n",
-    "        pds_tracks = [1]  # output track\n",
-    "        pg_tracks = [1]  # bias track\n",
-    "\n",
-    "        # specify row orientations\n",
-    "        n_orient = ['R0']  # gate connection on bottom\n",
-    "        p_orient = ['MX']  # gate connection on top\n",
-    "\n",
-    "        self.draw_base(lch, fg_tot, ptap_w, ntap_w, nw_list,\n",
-    "                       nth_list, pw_list, pth_list,\n",
-    "                       ng_tracks=ng_tracks, nds_tracks=nds_tracks,\n",
-    "                       pg_tracks=pg_tracks, pds_tracks=pds_tracks,\n",
-    "                       n_orientations=n_orient, p_orientations=p_orient,\n",
-    "                       )\n",
-    "\n",
-    "        # figure out if output connects to drain or source of nmos\n",
-    "        if (fg_amp - fg_load) % 4 == 0:\n",
-    "            s_net, d_net = '', 'vout'\n",
-    "            aout, aoutb, nsdir, nddir = 'd', 's', 0, 2\n",
-    "        else:\n",
-    "            s_net, d_net = 'vout', ''\n",
-    "            aout, aoutb, nsdir, nddir = 's', 'd', 2, 0\n",
-    "\n",
-    "        # create transistor connections\n",
-    "        load_col = ndum + fg_half - fg_half_pmos\n",
-    "        amp_col = ndum + fg_half - fg_half_nmos\n",
-    "        amp_ports = self.draw_mos_conn('nch', 0, amp_col, fg_amp, nsdir, nddir,\n",
-    "                                       s_net=s_net, d_net=d_net)\n",
-    "        load_ports = self.draw_mos_conn('pch', 0, load_col, fg_load, 2, 0,\n",
-    "                                        s_net='', d_net='vout')\n",
-    "        # amp_ports/load_ports are dictionaries of WireArrays representing\n",
-    "        # transistor ports.\n",
-    "        print(amp_ports)\n",
-    "        print(amp_ports['g'])\n",
-    "\n",
-    "        # create TrackID from relative track index\n",
-    "        vin_tid = self.make_track_id('nch', 0, 'g', 0)\n",
-    "        vbias_tid = self.make_track_id('pch', 0, 'g', 0)\n",
-    "        # can also convert from relative to absolute track index\n",
-    "        print(self.get_track_index('nch', 0, 'g', 0))\n",
-    "        # get output track index, put it in the middle\n",
-    "        vout_bot = self.get_track_index('nch', 0, 'ds', 0)\n",
-    "        vout_top = self.get_track_index('pch', 0, 'ds', 0)\n",
-    "        vout_index = self.grid.get_middle_track(vout_bot, vout_top, round_up=True)\n",
-    "        vout_tid = TrackID(self.mos_conn_layer + 1, vout_index)\n",
-    "\n",
-    "        vin_warr = self.connect_to_tracks(amp_ports['g'], vin_tid)\n",
-    "        vout_warr = self.connect_to_tracks([amp_ports[aout], load_ports['d']], vout_tid)\n",
-    "        vbias_warr = self.connect_to_tracks(load_ports['g'], vbias_tid)\n",
-    "        self.connect_to_substrate('ptap', amp_ports[aoutb])\n",
-    "        self.connect_to_substrate('ntap', load_ports['s'])\n",
-    "\n",
-    "        vss_warrs, vdd_warrs = self.fill_dummy()\n",
-    "\n",
-    "        self.add_pin('VSS', vss_warrs, show=show_pins)\n",
-    "        self.add_pin('VDD', vdd_warrs, show=show_pins)\n",
-    "        self.add_pin('vin', vin_warr, show=show_pins)\n",
-    "        self.add_pin('vout', vout_warr, show=show_pins)\n",
-    "        self.add_pin('vbias', vbias_warr, show=show_pins)\n",
-    "\n",
-    "        # compute schematic parameters\n",
-    "        self._sch_params = dict(\n",
-    "            lch=lch,\n",
-    "            w_dict=w_dict,\n",
-    "            intent_dict=intent_dict,\n",
-    "            fg_dict=fg_dict,\n",
-    "            dum_info=self.get_sch_dummy_info(),\n",
-    "        )\n",
-    "```"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Class Definition\n",
-    "```python\n",
-    "class AmpCS(AnalogBase):\n",
-    "    \"\"\"A common source amplifier.\"\"\"\n",
-    "    def __init__(self, temp_db, lib_name, params, used_names, **kwargs):\n",
-    "        AnalogBase.__init__(self, temp_db, lib_name, params, used_names, **kwargs)\n",
-    "        self._sch_params = None\n",
-    "        \n",
-    "        @property\n",
-    "        def sch_params(self):\n",
-    "            return self._sch_params\n",
-    "```\n",
-    "The layout generator code starts with the Python class definition.  We subclass the `AnalogBase` class to inherit various functions described earlier.  The constructor doesn't do much besides calling the super constructor and initializing a private attribute.  Finally, we declare a read-only property, `sch_params`, which we will compute later.  It contains the schematic parameters for the schematic generator we will see in the next module."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {
-    "collapsed": true
-   },
-   "source": [
-    "## Parameter Specifications\n",
-    "```python\n",
-    "@classmethod\n",
-    "def get_params_info(cls):\n",
-    "        \"\"\"Returns a dictionary containing parameter descriptions.\n",
-    "        Override this method to return a dictionary from parameter names to descriptions.\n",
-    "        Returns\n",
-    "        -------\n",
-    "        param_info : dict[str, str]\n",
-    "            dictionary from parameter name to description.\n",
-    "        \"\"\"\n",
-    "        return dict(\n",
-    "            lch='channel length, in meters.',\n",
-    "            w_dict='width dictionary.',\n",
-    "            intent_dict='intent dictionary.',\n",
-    "            fg_dict='number of fingers dictionary.',\n",
-    "            ndum='number of dummies on each side.',\n",
-    "            ptap_w='NMOS substrate width, in meters/number of fins.',\n",
-    "            ntap_w='PMOS substrate width, in meters/number of fins.',\n",
-    "            show_pins='True to draw pin geometries.',\n",
-    "        )\n",
-    "```\n",
-    "Next we have a class method, `get_params_info()`, that simply returns a Python dictionary from layout parameter names to a brief description of the corresponding parameter.  This method should list all layout parameters, and it is used to determine to compute a unique ID to represent the generated instance.  This allows XBase to avoid re-generating existing layouts when constructing a complex layout hierarchy with many duplicate layout instances."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## How many fingers in a row?\n",
-    "Next, in the `draw_layout()` method is where all the layout generation happens.  The beginning is rather straight-forward, then we get to the following section:\n",
-    "```python\n",
-    " # compute total number of fingers in each row\n",
-    "fg_half_pmos = fg_load // 2\n",
-    "fg_half_nmos = fg_amp // 2\n",
-    "fg_half = max(fg_half_pmos, fg_half_nmos)\n",
-    "fg_tot = (fg_half + ndum) * 2\n",
-    "```\n",
-    "This section computes how many fingers we need to draw in each transistor row.  To get a better understanding, consider the two scenarios below:\n",
-    "<img src=\"bootcamp_pics/3_analogbase/analogbase_7.PNG\" alt=\"Drawing\" style=\"width: 600px;\" />\n",
-    "Since `AnalogBase` must draw the same number of fingers for each row, we see that total number of fingers in each row depends on whether the AMP transistor or the LOAD transistor has more fingers.  We resolve this by using the `max()` function to get the larger of the two."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Drawing Transistor Rows\n",
-    "```python\n",
-    "# specify width/threshold of each row\n",
-    "nw_list = [w_dict['amp']]\n",
-    "pw_list = [w_dict['load']]\n",
-    "nth_list = [intent_dict['amp']]\n",
-    "pth_list = [intent_dict['load']]\n",
-    "\n",
-    "# specify number of horizontal tracks for each row\n",
-    "ng_tracks = [1]  # input track\n",
-    "nds_tracks = [1]  # one track for space\n",
-    "pds_tracks = [1]  # output track\n",
-    "pg_tracks = [1]  # bias track\n",
-    "\n",
-    "# specify row orientations\n",
-    "n_orient = ['R0'] # gate connection on bottom\n",
-    "p_orient = ['MX'] # gate connection on top\n",
-    "\n",
-    "self.draw_base(lch, fg_tot, ptap_w, ntap_w, nw_list,\n",
-    "               nth_list, pw_list, pth_list,\n",
-    "               ng_tracks=ng_tracks, nds_tracks=nds_tracks,\n",
-    "               pg_tracks=pg_tracks, pds_tracks=pds_tracks,\n",
-    "               n_orientations=n_orient, p_orientations=p_orient,\n",
-    "               )\n",
-    "```\n",
-    "This section specifies the layout parameters for each row, then calls the `draw_base()` method in `AnalogBase` to draw the transistor and substrate contact rows.  Note that the PMOS row orientation is set to `MX` so that `AnalogMosConn` will draw gate wires on the top of PMOS row."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Is output on source or drain?\n",
-    "```python\n",
-    "# figure out if output connects to drain or source of nmos\n",
-    "if (fg_amp - fg_load) % 4 == 0:\n",
-    "    aout, aoutb, nsdir, nddir = 'd', 's', 0, 2\n",
-    "else:\n",
-    "    aout, aoutb, nsdir, nddir = 's', 'd', 2, 0\n",
-    "```\n",
-    "This section determines if the output should connect to drain or source of the nmos transistor, and as the result what should the nmos source/drain wire directions be.  To see why this is necessary, consider the two cases shown below:\n",
-    "<img src=\"bootcamp_pics/3_analogbase/analogbase_8.PNG\" alt=\"Drawing\" style=\"width: 600px;\" />\n",
-    "In both cases, we have 8 PMOS fingers, and 4 or 6 NMOS fingers, respectively.  To make life simpler, we decide to always connect the output wires to PMOS drain (if you expect PMOS to always be larger, this gives you less parasitic capacitance).  Furthermore, to have better symmetric, we align the center of the PMOS and NMOS transistors.  Then, to minimize interconnect resistance, we should connect output to the NMOS junction that is aligned to PMOS drain.  If we check the above figure, we see that the corresponding NMOS junction is drain when NMOS has 4 fingers, but it is source when NMOS has 6 fingers!  This means that the correct NMOS junction to connect to actually depends on both `fg_amp` and `fg_load`.  By sketching a few example, you should be able to figure out that we need to connect output to NMOS drain if the difference in number of fingers is a multiple of 4, and connect output to NMOS drain otherwise.  This is exactly what this section of code does."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Drawing Transistor Connections\n",
-    "```python\n",
-    "# create transistor connections\n",
-    "load_col = ndum + fg_half - fg_half_pmos\n",
-    "amp_col = ndum + fg_half - fg_half_nmos\n",
-    "amp_ports = self.draw_mos_conn('nch', 0, amp_col, fg_amp, nsdir, nddir,\n",
-    "                               s_net=s_net, d_net=d_net)\n",
-    "load_ports = self.draw_mos_conn('pch', 0, load_col, fg_load, 2, 0,\n",
-    "                                s_net='', d_net='vout')\n",
-    "# amp_ports/load_ports are dictionaries of WireArrays representing\n",
-    "# transistor ports.\n",
-    "print(amp_ports)\n",
-    "print(amp_ports['g'])\n",
-    "```\n",
-    "Now we are ready to draw the actual transistor connections.  To do so, we use the `draw_mos_conn()` function.  As an example, `self.draw_mos_conn('pch', 0, load_col, fg_load, 2, 0)` creates an `AnalogMosConn` object on top of PMOS row 0, starting at transistor index `load_col` (with index 0 being left-most transistor), using `fg_load` fingers to the right, with source going up (code 2) and drain going down (code 0).  Remember that the source/drain directions are used to determine gate wires location.\n",
-    "\n",
-    "The optional parameters `s_net` and `d_net` specify the net names of the source and drain of the transistor drawn, respectively.  By default, if these are not specified (or set to empty strings), AnalogBase assume they connect to VDD for PMOS or VSS for NMOS.  These parameters are used to infer dummy transistor schematic to simplify the process of generating LVS-clean schematics.\n",
-    "\n",
-    "the `draw_mos_conn()` method will return a dictionary from the strings `'g'`, `'d'`, and `'s'` to the `WireArray` objects for the corresponding vertical wires."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Connecting Wires\n",
-    "```python\n",
-    "# create TrackID from relative track index\n",
-    "vin_tid = self.make_track_id('nch', 0, 'g', 0)\n",
-    "vout_tid = self.make_track_id('pch', 0, 'ds', 0)\n",
-    "vbias_tid = self.make_track_id('pch', 0, 'g', 0)\n",
-    "# can also convert from relative to absolute track index\n",
-    "print(self.get_track_index('nch', 0, 'g', 0))\n",
-    "\n",
-    "vin_warr = self.connect_to_tracks(amp_ports['g'], vin_tid)\n",
-    "vout_warr = self.connect_to_tracks([amp_ports[aout], load_ports['d']], vout_tid)\n",
-    "vbias_warr = self.connect_to_tracks(load_ports['g'], vbias_tid)\n",
-    "self.connect_to_substrate('ptap', amp_ports[aoutb])\n",
-    "self.connect_to_substrate('ntap', load_ports['s'])\n",
-    "```\n",
-    "This section used the `make_track_id()` and `get_track_index()` methods described before to get horizontal track indices from relative index.  We then use `connect_to_tracks()` to connect wires to the desired tracks.  `connect_to_substrate()` method is used to connect transistor junctions to the specified substrate contacts."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Dummies and Pins\n",
-    "```python\n",
-    "vss_warrs, vdd_warrs = self.fill_dummy()\n",
-    "\n",
-    "self.add_pin('VSS', vss_warrs, show=show_pins)\n",
-    "self.add_pin('VDD', vdd_warrs, show=show_pins)\n",
-    "self.add_pin('vin', vin_warr, show=show_pins)\n",
-    "self.add_pin('vout', vout_warr, show=show_pins)\n",
-    "self.add_pin('vbias', vbias_warr, show=show_pins)\n",
-    "```\n",
-    "After all connections are made, the `fill_dummy()` method can be used to automatically connect all unconnected transistors to corresponding substrate contacts as dummy transistors.  `add_pin()` function is used to add layout pins, as seem from the routing demo module."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Schematic Parameters\n",
-    "```python\n",
-    "# compute schematic parameters\n",
-    "self._sch_params = dict(\n",
-    "    lch=lch,\n",
-    "    w_dict=w_dict,\n",
-    "    intent_dict=intent_dict,\n",
-    "    fg_dict=fg_dict,\n",
-    "    dum_info=self.get_sch_dummy_info(),\n",
-    ")\n",
-    "```\n",
-    "Finally, we compute the schematic parameter dictionary, which will be used with the schematic generator later to produce LVS clean schematic.  The `get_sch_dummy_info()` method will return a data structure that describes all the dummy transistors in this AnalogBase.  This data structure will be used by the schematic generator to create the corresponding transistors."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## SF Amplifier Exercise\n",
-    "Now that you understand how the common-source amplifier layout generator works, try to complete the following source-follower amplifier class by filling in missing codes.  The floorplan for the source-follower amplifier is drawn for you below:\n",
-    "<img src=\"bootcamp_pics/3_analogbase/analogbase_9.PNG\" alt=\"Drawing\" style=\"width: 400px;\"/>\n",
-    "Notice that:\n",
-    "* we have two rows of NMOS.\n",
-    "* Gate connection is on the top for second row\n",
-    "* To minimize parasitics, we will use leave 1 horizontal track empty between vin and VDD.\n",
-    "\n",
-    "You can evaluate the next cell (Press Ctrl+Enter) to see a preliminary layout of the source follower.  It will also run LVS after generating the layout, which will fail if your layout is not correct."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "creating BagProject\n",
-      "computing layout\n",
-      "ext_w0 = 1, ext_wend=7, ytop=2880\n",
-      "ext_w0 = 2, ext_wend=9, ytop=3024\n",
-      "final: ext_w0 = 1, ext_wend=7, ytop=2880\n",
-      "creating layout\n",
-      "layout done\n",
-      "computing AMP_SF schematics\n"
-     ]
-    },
-    {
-     "ename": "TypeError",
-     "evalue": "design() argument after ** must be a mapping, not NoneType",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-1-6182a9967843>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m    178\u001b[0m     \u001b[0mbprj\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbag\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mBagProject\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    179\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 180\u001b[1;33m \u001b[0mdemo_core\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_flow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbprj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtop_specs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'amp_sf_soln'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mAmpSF\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrun_lvs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlvs_only\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;32m~/projects/bag_gen/BAG2_cds_ff_mpt/BAG_XBase_demo/xbase_demo/core.py\u001b[0m in \u001b[0;36mrun_flow\u001b[1;34m(prj, specs, dsn_name, lay_cls, sch_cls, run_lvs, lvs_only)\u001b[0m\n\u001b[0;32m    376\u001b[0m     \u001b[1;31m# generate design/testbench schematics\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    377\u001b[0m     gen_schematics(prj, specs, dsn_name, dsn_sch_params, sch_cls=sch_cls,\n\u001b[1;32m--> 378\u001b[1;33m                    check_lvs=run_lvs, lvs_only=lvs_only)\n\u001b[0m\u001b[0;32m    379\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    380\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlvs_only\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;32m~/projects/bag_gen/BAG2_cds_ff_mpt/BAG_XBase_demo/xbase_demo/core.py\u001b[0m in \u001b[0;36mgen_schematics\u001b[1;34m(prj, specs, dsn_name, sch_params, sch_cls, check_lvs, lvs_only)\u001b[0m\n\u001b[0;32m     99\u001b[0m         \u001b[0mdsn\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mprj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcreate_design_module\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msch_lib\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msch_cell\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    100\u001b[0m         \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'computing %s schematics'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[0mgen_cell\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 101\u001b[1;33m         \u001b[0mdsn\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdesign\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0msch_params\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    102\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    103\u001b[0m         dsn = prj.new_schematic_instance(lib_name=sch_lib, cell_name=sch_cell,\n",
-      "\u001b[1;31mTypeError\u001b[0m: design() argument after ** must be a mapping, not NoneType"
-     ]
-    }
-   ],
-   "source": [
-    "from abs_templates_ec.analog_core import AnalogBase\n",
-    "\n",
-    "\n",
-    "class AmpSF(AnalogBase):\n",
-    "    \"\"\"A template of a single transistor with dummies.\n",
-    "\n",
-    "    This class is mainly used for transistor characterization or\n",
-    "    design exploration with config views.\n",
-    "\n",
-    "    Parameters\n",
-    "    ----------\n",
-    "    temp_db : :class:`bag.layout.template.TemplateDB`\n",
-    "            the template database.\n",
-    "    lib_name : str\n",
-    "        the layout library name.\n",
-    "    params : dict[str, any]\n",
-    "        the parameter values.\n",
-    "    used_names : set[str]\n",
-    "        a set of already used cell names.\n",
-    "    kwargs : dict[str, any]\n",
-    "        dictionary of optional parameters.  See documentation of\n",
-    "        :class:`bag.layout.template.TemplateBase` for details.\n",
-    "    \"\"\"\n",
-    "\n",
-    "    def __init__(self, temp_db, lib_name, params, used_names, **kwargs):\n",
-    "        AnalogBase.__init__(self, temp_db, lib_name, params, used_names, **kwargs)\n",
-    "        self._sch_params = None\n",
-    "\n",
-    "    @property\n",
-    "    def sch_params(self):\n",
-    "        return self._sch_params\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        \"\"\"Returns a dictionary containing parameter descriptions.\n",
-    "\n",
-    "        Override this method to return a dictionary from parameter names to descriptions.\n",
-    "\n",
-    "        Returns\n",
-    "        -------\n",
-    "        param_info : dict[str, str]\n",
-    "            dictionary from parameter name to description.\n",
-    "        \"\"\"\n",
-    "        return dict(\n",
-    "            lch='channel length, in meters.',\n",
-    "            w_dict='width dictionary.',\n",
-    "            intent_dict='intent dictionary.',\n",
-    "            fg_dict='number of fingers dictionary.',\n",
-    "            ndum='number of dummies on each side.',\n",
-    "            ptap_w='NMOS substrate width, in meters/number of fins.',\n",
-    "            ntap_w='PMOS substrate width, in meters/number of fins.',\n",
-    "            show_pins='True to draw pin geometries.',\n",
-    "        )\n",
-    "\n",
-    "    def draw_layout(self):\n",
-    "        \"\"\"Draw the layout of a transistor for characterization.\n",
-    "        \"\"\"\n",
-    "\n",
-    "        lch = self.params['lch']\n",
-    "        w_dict = self.params['w_dict']\n",
-    "        intent_dict = self.params['intent_dict']\n",
-    "        fg_dict = self.params['fg_dict']\n",
-    "        ndum = self.params['ndum']\n",
-    "        ptap_w = self.params['ptap_w']\n",
-    "        ntap_w = self.params['ntap_w']\n",
-    "        show_pins = self.params['show_pins']\n",
-    "\n",
-    "        fg_amp = fg_dict['amp']\n",
-    "        fg_bias = fg_dict['bias']\n",
-    "\n",
-    "        if fg_bias % 2 != 0 or fg_amp % 2 != 0:\n",
-    "            raise ValueError('fg_bias=%d and fg_amp=%d must all be even.' % (fg_bias, fg_amp))\n",
-    "\n",
-    "        fg_half_bias = fg_bias // 2\n",
-    "        fg_half_amp = fg_amp // 2\n",
-    "        fg_half = max(fg_half_bias, fg_half_amp)\n",
-    "        fg_tot = (fg_half + ndum) * 2\n",
-    "\n",
-    "        nw_list = [w_dict['bias'], w_dict['amp']]\n",
-    "        nth_list = [intent_dict['bias'], intent_dict['amp']]\n",
-    "        ng_tracks = [1, 3]\n",
-    "        nds_tracks = [1, 1]\n",
-    "\n",
-    "        n_orient = ['R0', 'MX']\n",
-    "\n",
-    "        self.draw_base(lch, fg_tot, ptap_w, ntap_w, nw_list,\n",
-    "                       nth_list, [], [],\n",
-    "                       ng_tracks=ng_tracks, nds_tracks=nds_tracks,\n",
-    "                       pg_tracks=[], pds_tracks=[],\n",
-    "                       n_orientations=n_orient,\n",
-    "                       )\n",
-    "\n",
-    "        if (fg_amp - fg_bias) % 4 == 0:\n",
-    "            s_net, d_net = 'VDD', 'vout'\n",
-    "            aout, aoutb, nsdir, nddir = 'd', 's', 2, 0\n",
-    "        else:\n",
-    "            s_net, d_net = 'vout', 'VDD'\n",
-    "            aout, aoutb, nsdir, nddir = 's', 'd', 0, 2\n",
-    "\n",
-    "        # TODO: compute bias_col and amp_col\n",
-    "        bias_col = amp_col = 0\n",
-    "\n",
-    "        amp_ports = self.draw_mos_conn('nch', 1, amp_col, fg_amp, nsdir, nddir,\n",
-    "                                       s_net=s_net, d_net=d_net)\n",
-    "        bias_ports = self.draw_mos_conn('nch', 0, bias_col, fg_bias, 0, 2,\n",
-    "                                        s_net='', d_net='vout')\n",
-    "\n",
-    "        # TODO: get TrackIDs for horizontal tracks\n",
-    "        # The following are related code copied and pasted from AmpCS\n",
-    "        # for reference\n",
-    "        # vin_tid = self.make_track_id('nch', 0, 'g', 0)\n",
-    "        # vout_tid = self.make_track_id('pch', 0, 'ds', 0)\n",
-    "        # vbias_tid = self.make_track_id('pch', 0, 'g', 0)\n",
-    "        vdd_tid = vin_tid = vout_tid = vbias_tid = None\n",
-    "\n",
-    "        if vdd_tid is None:\n",
-    "            return\n",
-    "\n",
-    "        # uncomment to visualize track location\n",
-    "        # hm_layer = self.mos_conn_layer + 1\n",
-    "        # xl = self.bound_box.left_unit\n",
-    "        # xr = self.bound_box.right_unit\n",
-    "        # self.add_wires(hm_layer, vdd_tid.base_index, xl, xr, unit_mode=True)\n",
-    "        # self.add_wires(hm_layer, vin_tid.base_index, xl, xr, unit_mode=True)\n",
-    "        # self.add_wires(hm_layer, vout_tid.base_index, xl, xr, unit_mode=True)\n",
-    "        # self.add_wires(hm_layer, vbias_tid.base_index, xl, xr, unit_mode=True)\n",
-    "        \n",
-    "        # TODO: connect transistors to horizontal tracks\n",
-    "        # The following are related code copied and pasted from AmpCS\n",
-    "        # for reference\n",
-    "        # vin_warr = self.connect_to_tracks(amp_ports['g'], vin_tid)\n",
-    "        # vout_warr = self.connect_to_tracks([amp_ports[aout], load_ports['d']], vout_tid)\n",
-    "        # vbias_warr = self.connect_to_tracks(load_ports['g'], vbias_tid)\n",
-    "        vin_warr = vout_warr = vbias_warr = vdd_warr = None\n",
-    "\n",
-    "        if vin_warr is None:\n",
-    "            return\n",
-    "\n",
-    "        self.connect_to_substrate('ptap', bias_ports['s'])\n",
-    "\n",
-    "        vss_warrs, _ = self.fill_dummy()\n",
-    "\n",
-    "        self.add_pin('VSS', vss_warrs, show=show_pins)\n",
-    "        # TODO: add pins\n",
-    "\n",
-    "        # set schematic parameters\n",
-    "        self._sch_params = dict(\n",
-    "            lch=lch,\n",
-    "            w_dict=w_dict,\n",
-    "            intent_dict=intent_dict,\n",
-    "            fg_dict=fg_dict,\n",
-    "            dum_info=self.get_sch_dummy_info(),\n",
-    "        )\n",
-    "\n",
-    "        \n",
-    "        \n",
-    "import os\n",
-    "\n",
-    "# import bag package\n",
-    "import bag\n",
-    "from bag.io import read_yaml\n",
-    "\n",
-    "# import BAG demo Python modules\n",
-    "import xbase_demo.core as demo_core\n",
-    "from xbase_demo.demo_layout.core import AmpSFSoln\n",
-    "\n",
-    "# load circuit specifications from file\n",
-    "spec_fname = os.path.join(os.environ['BAG_WORK_DIR'], 'specs_demo/demo.yaml')\n",
-    "top_specs = read_yaml(spec_fname)\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "\n",
-    "demo_core.run_flow(bprj, top_specs, 'amp_sf_soln', AmpSF, run_lvs=True, lvs_only=True)"
-   ]
-  }
- ],
- "metadata": {
-  "anaconda-cloud": {},
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.5"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/workspace_setup/tutorial_files/4_schematic_generators.ipynb b/workspace_setup/tutorial_files/4_schematic_generators.ipynb
deleted file mode 100644
index 5246a6e..0000000
--- a/workspace_setup/tutorial_files/4_schematic_generators.ipynb
+++ /dev/null
@@ -1,344 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Schematic Generators\n",
-    "This module covers the basics of writing a schematic generator."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Schematic Generation Flow\n",
-    "The schematic generator design flow is slightly different than the layout generator design flow.  As described in Module 1, BAG copies an existing schematic template in Virtuoso and perform modifications on it in order to generate human-readable schematic instances.  The schematic generation flow follows the steps below:\n",
-    "\n",
-    "1. Create schematic in Virtuoso.\n",
-    "2. Import schematic information from Virtuoso to Python.\n",
-    "3. Implement schematic generator in Python.\n",
-    "4. Use BAG to create new instances of the schematic."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## CS Amplifier Schematic Generator Example\n",
-    "Lets walk through the common-source amplifier schematic generator example, reproduced below:\n",
-    "\n",
-    "```python\n",
-    "yaml_file = pkg_resources.resource_filename(__name__, os.path.join('netlist_info', 'amp_cs.yaml'))\n",
-    "\n",
-    "class demo_templates__amp_cs(Module):\n",
-    "\n",
-    "    def __init__(self, bag_config, parent=None, prj=None, **kwargs):\n",
-    "        Module.__init__(self, bag_config, yaml_file, parent=parent, prj=prj, **kwargs)\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        return dict(\n",
-    "            lch='channel length in meters.',\n",
-    "            w_dict='Dictionary of transistor widths.',\n",
-    "            intent_dict='Dictionary of transistor threshold flavors.',\n",
-    "            fg_dict='Dictionary of transistor number of fingers.',\n",
-    "            dum_info='Dummy information data structure',\n",
-    "        )\n",
-    "        \n",
-    "    def design(self, lch, w_dict, intent_dict, fg_dict, dum_info):\n",
-    "        # populate self.parameters dictionary\n",
-    "        wp = w_dict['load']\n",
-    "        wn = w_dict['amp']\n",
-    "        intentp = intent_dict['load']\n",
-    "        intentn = intent_dict['amp']\n",
-    "\n",
-    "        fg_amp = fg_dict['amp']\n",
-    "        fg_load = fg_dict['load']\n",
-    "\n",
-    "        # set transistor parameters\n",
-    "        self.instances['XP'].design(w=wp, l=lch, intent=intentp, nf=fg_load)\n",
-    "        self.instances['XN'].design(w=wn, l=lch, intent=intentn, nf=fg_amp)\n",
-    "\n",
-    "        # handle dummy transistors\n",
-    "        self.design_dummy_transistors(dum_info, 'XDUM', 'VDD', 'VSS')\n",
-    "\n",
-    "```"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Constructor\n",
-    "Consider the section below:\n",
-    "```python\n",
-    "yaml_file = pkg_resources.resource_filename(__name__, os.path.join('netlist_info', 'amp_cs.yaml'))\n",
-    "\n",
-    "class demo_templates__amp_cs(Module):\n",
-    "\n",
-    "    def __init__(self, bag_config, parent=None, prj=None, **kwargs):\n",
-    "        Module.__init__(self, bag_config, yaml_file, parent=parent, prj=prj, **kwargs)\n",
-    "```\n",
-    "First of all, notice the `yaml_file` variable.  This variable stores the path to a netlist file that describes instances and connections in the schematic template.  This netlist file is generated by BAG when schematic templates are imported from Virtuoso to BAG.  This implies that everytime you modify the schematic template, you should re-import the design to BAG in order to update this file.\n",
-    "\n",
-    "Then, notice that this class is a subclass of `Module`.  Similar to `AnalogBase`, `Module` is the base class of all schematic generators, and it provides many useful functions to modify the schematic template."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Parameters information\n",
-    "Next we have the following class method declaration:\n",
-    "\n",
-    "```python\n",
-    "@classmethod\n",
-    "def get_params_info(cls):\n",
-    "    return dict(\n",
-    "        lch='channel length in meters.',\n",
-    "        w_dict='Dictionary of transistor widths.',\n",
-    "        intent_dict='Dictionary of transistor threshold flavors.',\n",
-    "        fg_dict='Dictionary of transistor number of fingers.',\n",
-    "        dum_info='Dummy information data structure',\n",
-    "    )\n",
-    "```\n",
-    "\n",
-    "This method serves the same purpose as the method with the same name in layout generators."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## The Design Method\n",
-    "```python\n",
-    "def design(self, lch, w_dict, intent_dict, fg_dict, dum_info):\n",
-    "```\n",
-    "Next we have the `design()` method.  Similar to `draw_layout()`, this is where all schematic modification happens.  Note that all schematic parameters should be listed as arguments of the `design()` method."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Setting Transistor Parameters\n",
-    "The first several lines of `design()` are quite self-explanatory.  Then we have the following:\n",
-    "\n",
-    "```python\n",
-    "# set transistor parameters\n",
-    "self.instances['XP'].design(w=wp, l=lch, intent=intentp, nf=fg_load)\n",
-    "self.instances['XN'].design(w=wn, l=lch, intent=intentn, nf=fg_amp)\n",
-    "```\n",
-    "All instances in the schematic template will be present in the `self.instances` dictionary, which maps instance names to the corresponding `SchInstance` objects (This is why you should always choose meaningful names for instances in your schematic template).  You can modify these instances by called their `design()` method.  For `BAG_prim` transistors, their `design()` method takes parameters `w`, `l`, `intent`, and `nf`, which stands for width, length, transistor threshold, and number of fingers, respectively.\n"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Dummy transistors\n",
-    "In the next line we have:\n",
-    "\n",
-    "```python\n",
-    "# handle dummy transistors\n",
-    "self.design_dummy_transistors(dum_info, 'XDUM', 'VDD', 'VSS')\n",
-    "```\n",
-    "Recall that `dum_info` is the dummy transistor data struct computed by AnalogBase.  The `design_dummy_transistors()` method will automatically help you create the corresponding dummy transistors in the schematic, by copying and modifying a transistor instance in the schematic template.  For example, here it'll copy and modfy the \"XDUM\" transistor instance, and use \"VDD\" as the power supply name, \"VSS\" as the ground supply name."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## SF Schematic Exercise\n",
-    "Now let's try to create a source-follower schematic generator.  Before we start writing generator code, we need to create a schematic template for the source-follower:\n",
-    "\n",
-    "1. Open the cellview `demo_templates`/`amp_sf` in Virtuoso.\n",
-    "\n",
-    "2. Instantiate non-dummy transistors from the `BAG_prim` library, and create proper connections.  Use `nmos4_standard` and `pmos4_standard` as the transistors.  Leave the dummy transistor alone.\n",
-    "    * Name the amplifying transistor `XAMP` and the bias transistor `XBIAS`.\n",
-    "\n",
-    "3. If you're stuck or you want to check your answer, see the schematic for `demo_templates`/`amp_sf_soln`.\n",
-    "\n",
-    "4. After completing the schematic, evaluate the following cell, which will update the netlist associated with `amp_sf`."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "creating BagProject\n",
-      "importing netlist from virtuoso\n",
-      "netlist import done\n"
-     ]
-    }
-   ],
-   "source": [
-    "import bag\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "    \n",
-    "print('importing netlist from virtuoso')\n",
-    "bprj.import_design_library('demo_templates')\n",
-    "print('netlist import done')"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {
-    "collapsed": true
-   },
-   "source": [
-    "## Implement Schematic Generator\n",
-    "Now that you finished the schematic template and imported netlist information into BAG, fill in the missing parts of the following schematic generator.  After you finished, evaluate the cell below to run the source-follower amplifer through the flow.  If everything works properly, LVS should pass, and you should see DC/AC/Transient simulation plots of the source-follower.  If you need to change the schematic template in Virtuoso, remember to re-evaluate the cell above to regenerate the netlist file."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "creating BagProject\n",
-      "computing layout\n",
-      "ext_w0 = 1, ext_wend=9, tot_ntr=20\n",
-      "ext_w0 = 2, ext_wend=8, tot_ntr=20\n",
-      "ext_w0 = 4, ext_wend=9, tot_ntr=21\n",
-      "final: ext_w0 = 2, ext_wend=8, tot_ntr=20\n",
-      "creating layout\n",
-      "layout done\n",
-      "creating AMP_SF schematics\n",
-      "running lvs\n",
-      "Running tasks, Press Ctrl-C to cancel.\n"
-     ]
-    },
-    {
-     "ename": "ValueError",
-     "evalue": "LVS failed.  check log file: /tools/projects/erichang/bag_gen/BAG2_cds_ff_mpt/pvs_run/lvs_run_dir/DEMO_AMP_SF/AMP_SF/lvsLog_20171127_232149rtf5tphj",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-2-f2776ed95ca3>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m     89\u001b[0m     \u001b[0mbprj\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbag\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mBagProject\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     90\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 91\u001b[1;33m \u001b[0mdemo_core\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_flow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbprj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtop_specs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'amp_sf'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mAmpSFSoln\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msch_cls\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdemo_templates__amp_sf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrun_lvs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;32m/tools/projects/erichang/bag_gen/BAG2_cds_ff_mpt/BAG_XBase_demo/xbase_demo/core.py\u001b[0m in \u001b[0;36mrun_flow\u001b[1;34m(prj, specs, dsn_name, lay_cls, sch_cls, run_lvs, lvs_only)\u001b[0m\n\u001b[0;32m    375\u001b[0m     \u001b[0mdsn_sch_params\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgen_layout\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mspecs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdsn_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlay_cls\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    376\u001b[0m     \u001b[1;31m# generate design/testbench schematics\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 377\u001b[1;33m     \u001b[0mgen_schematics\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mspecs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdsn_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdsn_sch_params\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msch_cls\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msch_cls\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcheck_lvs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mrun_lvs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlvs_only\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlvs_only\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    378\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    379\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlvs_only\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;32m/tools/projects/erichang/bag_gen/BAG2_cds_ff_mpt/BAG_XBase_demo/xbase_demo/core.py\u001b[0m in \u001b[0;36mgen_schematics\u001b[1;34m(prj, specs, dsn_name, sch_params, sch_cls, check_lvs, lvs_only)\u001b[0m\n\u001b[0;32m    112\u001b[0m         \u001b[0mlvs_passed\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlvs_log\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mprj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_lvs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimpl_lib\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mgen_cell\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    113\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mlvs_passed\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 114\u001b[1;33m             \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'LVS failed.  check log file: %s'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[0mlvs_log\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    115\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    116\u001b[0m             \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'lvs passed'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mValueError\u001b[0m: LVS failed.  check log file: /tools/projects/erichang/bag_gen/BAG2_cds_ff_mpt/pvs_run/lvs_run_dir/DEMO_AMP_SF/AMP_SF/lvsLog_20171127_232149rtf5tphj"
-     ]
-    }
-   ],
-   "source": [
-    "%matplotlib inline\n",
-    "\n",
-    "import os\n",
-    "\n",
-    "from bag.design import Module\n",
-    "\n",
-    "\n",
-    "# noinspection PyPep8Naming\n",
-    "class demo_templates__amp_sf(Module):\n",
-    "    \"\"\"Module for library demo_templates cell amp_sf.\n",
-    "\n",
-    "    Fill in high level description here.\n",
-    "    \"\"\"\n",
-    "\n",
-    "    def __init__(self, bag_config, parent=None, prj=None, **kwargs):\n",
-    "        # hard coded netlist flie path to get jupyter notebook working.\n",
-    "        yaml_file = os.path.join(os.environ['BAG_WORK_DIR'], 'BAG_XBase_demo', \n",
-    "                                 'BagModules', 'demo_templates', 'netlist_info', 'amp_sf.yaml') \n",
-    "\n",
-    "        Module.__init__(self, bag_config, yaml_file, parent=parent, prj=prj, **kwargs)\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        return dict(\n",
-    "            lch='channel length in meters.',\n",
-    "            w_dict='Dictionary of transistor widths.',\n",
-    "            intent_dict='Dictionary of transistor threshold flavors.',\n",
-    "            fg_dict='Dictionary of transistor number of fingers.',\n",
-    "            dum_info='Dummy information data structure',\n",
-    "        )\n",
-    "\n",
-    "    def design(self, lch, w_dict, intent_dict, fg_dict, dum_info):\n",
-    "        w_amp = w_dict['amp']\n",
-    "        w_bias = w_dict['bias']\n",
-    "        intent_amp = intent_dict['amp']\n",
-    "        intent_bias = intent_dict['bias']\n",
-    "        fg_amp = fg_dict['amp']\n",
-    "        fg_bias = fg_dict['bias']\n",
-    "\n",
-    "        # TODO: design XAMP and XBIAS transistors\n",
-    "        # related code from amp_cs schematic generator are copied below\n",
-    "        # for reference\n",
-    "        # self.instances['XP'].design(w=wp, l=lch, intent=intentp, nf=fg_load)\n",
-    "        # self.instances['XN'].design(w=wn, l=lch, intent=intentn, nf=fg_amp)\n",
-    "\n",
-    "        # handle dummy transistors\n",
-    "        self.design_dummy_transistors(dum_info, 'XDUM', 'VDD', 'VSS')\n",
-    "\n",
-    "        \n",
-    "import os\n",
-    "\n",
-    "# import bag package\n",
-    "import bag\n",
-    "from bag.io import read_yaml\n",
-    "\n",
-    "# import BAG demo Python modules\n",
-    "import xbase_demo.core as demo_core\n",
-    "from xbase_demo.demo_layout.core import AmpSFSoln\n",
-    "\n",
-    "# load circuit specifications from file\n",
-    "spec_fname = os.path.join(os.environ['BAG_WORK_DIR'], 'specs_demo/demo.yaml')\n",
-    "top_specs = read_yaml(spec_fname)\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "\n",
-    "demo_core.run_flow(bprj, top_specs, 'amp_sf', AmpSFSoln, sch_cls=demo_templates__amp_sf, run_lvs=True)"
-   ]
-  }
- ],
- "metadata": {
-  "anaconda-cloud": {},
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.5"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/workspace_setup/tutorial_files/5_hierarchical_generators.ipynb b/workspace_setup/tutorial_files/5_hierarchical_generators.ipynb
deleted file mode 100644
index 5f88586..0000000
--- a/workspace_setup/tutorial_files/5_hierarchical_generators.ipynb
+++ /dev/null
@@ -1,606 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Module 5: Hierarchical Generators\n",
-    "This module covers writing layout/schematic generators that instantiate other generators.  We will write a two-stage amplifier generator, which instatiates the common-source amplifier followed by the source-follower amplifier."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## AmpChain Layout Example\n",
-    "First, we will write a layout generator for the two-stage amplifier.  The layout floorplan is drawn for you below:\n",
-    "<img src=\"bootcamp_pics/5_hierarchical_generator/hierachical_generator_1.PNG\" alt=\"Drawing\" style=\"width: 400px;\"/>\n",
-    "This floorplan abuts the `AmpCS` instance next to `AmpSF` instance, the `VSS` ports are simply shorted together, and the top `VSS` port of `AmpSF` is ignored (they are connected together internally by dummy connections).  The intermediate node of the two-stage amplifier is connected using a vertical routing track in the middle of the two amplifier blocks.  `VDD` ports are connected to the top-most M6 horizontal track, and other ports are simply exported in-place.\n",
-    "\n",
-    "The layout generator is reproduced below, with some parts missing (which you will fill out later).  We will walk through the important sections of the code.\n",
-    "```python\n",
-    "class AmpChain(TemplateBase):\n",
-    "    def __init__(self, temp_db, lib_name, params, used_names, **kwargs):\n",
-    "        TemplateBase.__init__(self, temp_db, lib_name, params, used_names, **kwargs)\n",
-    "        self._sch_params = None\n",
-    "\n",
-    "    @property\n",
-    "    def sch_params(self):\n",
-    "        return self._sch_params\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        return dict(\n",
-    "            cs_params='common source amplifier parameters.',\n",
-    "            sf_params='source follower parameters.',\n",
-    "            show_pins='True to draw pin geometries.',\n",
-    "        )\n",
-    "\n",
-    "    def draw_layout(self):\n",
-    "        \"\"\"Draw the layout of a transistor for characterization.\n",
-    "        \"\"\"\n",
-    "\n",
-    "        # make copies of given dictionaries to avoid modifying external data.\n",
-    "        cs_params = self.params['cs_params'].copy()\n",
-    "        sf_params = self.params['sf_params'].copy()\n",
-    "        show_pins = self.params['show_pins']\n",
-    "\n",
-    "        # disable pins in subcells\n",
-    "        cs_params['show_pins'] = False\n",
-    "        sf_params['show_pins'] = False\n",
-    "\n",
-    "        # create layout masters for subcells we will add later\n",
-    "        cs_master = self.new_template(params=cs_params, temp_cls=AmpCS)\n",
-    "        # TODO: create sf_master.  Use AmpSFSoln class\n",
-    "        sf_master = None\n",
-    "\n",
-    "        if sf_master is None:\n",
-    "            return\n",
-    "\n",
-    "        # add subcell instances\n",
-    "        cs_inst = self.add_instance(cs_master, 'XCS')\n",
-    "        # add source follower to the right of common source\n",
-    "        x0 = cs_inst.bound_box.right_unit\n",
-    "        sf_inst = self.add_instance(sf_master, 'XSF', loc=(x0, 0), unit_mode=True)\n",
-    "\n",
-    "        # get VSS wires from AmpCS/AmpSF\n",
-    "        cs_vss_warr = cs_inst.get_all_port_pins('VSS')[0]\n",
-    "        sf_vss_warrs = sf_inst.get_all_port_pins('VSS')\n",
-    "        # only connect bottom VSS wire of source follower\n",
-    "        if sf_vss_warrs[0].track_id.base_index < sf_vss_warrs[1].track_id.base_index:\n",
-    "            sf_vss_warr = sf_vss_warrs[0]\n",
-    "        else:\n",
-    "            sf_vss_warr = sf_vss_warrs[1]\n",
-    "\n",
-    "        # connect VSS of the two blocks together\n",
-    "        vss = self.connect_wires([cs_vss_warr, sf_vss_warr])[0]\n",
-    "\n",
-    "        # get layer IDs from VSS wire\n",
-    "        hm_layer = vss.layer_id\n",
-    "        vm_layer = hm_layer + 1\n",
-    "        top_layer = vm_layer + 1\n",
-    "\n",
-    "        # calculate template size\n",
-    "        tot_box = cs_inst.bound_box.merge(sf_inst.bound_box)\n",
-    "        self.set_size_from_bound_box(top_layer, tot_box, round_up=True)\n",
-    "\n",
-    "        # get subcell ports as WireArrays so we can connect them\n",
-    "        vmid0 = cs_inst.get_all_port_pins('vout')[0]\n",
-    "        vmid1 = sf_inst.get_all_port_pins('vin')[0]\n",
-    "        vdd0 = cs_inst.get_all_port_pins('VDD')[0]\n",
-    "        vdd1 = sf_inst.get_all_port_pins('VDD')[0]\n",
-    "\n",
-    "        # get vertical VDD TrackIDs\n",
-    "        vdd0_tid = TrackID(vm_layer, self.grid.coord_to_nearest_track(vm_layer, vdd0.middle))\n",
-    "        vdd1_tid = TrackID(vm_layer, self.grid.coord_to_nearest_track(vm_layer, vdd1.middle))\n",
-    "\n",
-    "        # connect VDD of each block to vertical M5\n",
-    "        vdd0 = self.connect_to_tracks(vdd0, vdd0_tid)\n",
-    "        vdd1 = self.connect_to_tracks(vdd1, vdd1_tid)\n",
-    "        # connect M5 VDD to top M6 horizontal track\n",
-    "        vdd_tidx = self.grid.get_num_tracks(self.size, top_layer) - 1\n",
-    "        vdd_tid = TrackID(top_layer, vdd_tidx)\n",
-    "        vdd = self.connect_to_tracks([vdd0, vdd1], vdd_tid)\n",
-    "\n",
-    "        # TODO: connect vmid0 and vmid1 to vertical track in the middle of two templates\n",
-    "        # hint: use x0\n",
-    "        vmid = None\n",
-    "\n",
-    "        if vmid is None:\n",
-    "            return\n",
-    "\n",
-    "        # add pins on wires\n",
-    "        self.add_pin('vmid', vmid, show=show_pins)\n",
-    "        self.add_pin('VDD', vdd, show=show_pins)\n",
-    "        self.add_pin('VSS', vss, show=show_pins)\n",
-    "        # re-export pins on subcells.\n",
-    "        self.reexport(cs_inst.get_port('vin'), show=show_pins)\n",
-    "        self.reexport(cs_inst.get_port('vbias'), net_name='vb1', show=show_pins)\n",
-    "        # TODO: reexport vout and vbias of source follower\n",
-    "        # TODO: vbias should be renamed to vb2\n",
-    "\n",
-    "        # compute schematic parameters.\n",
-    "        self._sch_params = dict(\n",
-    "            cs_params=cs_master.sch_params,\n",
-    "            sf_params=sf_master.sch_params,\n",
-    "        )\n",
-    "```"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## AmpChain Constructor\n",
-    "```python\n",
-    "class AmpChain(TemplateBase):\n",
-    "    def __init__(self, temp_db, lib_name, params, used_names, **kwargs):\n",
-    "        TemplateBase.__init__(self, temp_db, lib_name, params, used_names, **kwargs)\n",
-    "        self._sch_params = None\n",
-    "\n",
-    "    @property\n",
-    "    def sch_params(self):\n",
-    "        return self._sch_params\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        return dict(\n",
-    "            cs_params='common source amplifier parameters.',\n",
-    "            sf_params='source follower parameters.',\n",
-    "            show_pins='True to draw pin geometries.',\n",
-    "        )\n",
-    "```\n",
-    "First, notice that instead of subclassing `AnalogBase`, the `AmpChain` class subclasses `TemplateBase`.  This is because we are not trying to draw transistor rows inside this layout generator; we just want to place and route multiple layout instances together.  `TemplateBase` is the base class for all layout generators and it provides most placement and routing methods you need.\n",
-    "\n",
-    "Next, notice that the parameters for `AmpChain` are simply parameter dictionaries for the two sub-generators.  The ability to use complex data structures as generator parameters solves the parameter explosion problem when writing generators with many levels of hierarchy."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Creating Layout Master\n",
-    "```python\n",
-    "# create layout masters for subcells we will add later\n",
-    "cs_master = self.new_template(params=cs_params, temp_cls=AmpCS)\n",
-    "# TODO: create sf_master.  Use AmpSFSoln class\n",
-    "sf_master = None\n",
-    "```\n",
-    "Here, the `new_template()` function creates a new layout master, `cs_master`, which represents a generated layout cellview from the `AmpCS` layout generator.  We can later instances of this master in the current layout, which are references to the generated `AmpCS` layout cellview, perhaps shifted and rotated.  The main take away is that the `new_template()` function does not add any layout geometries to the current layout, but rather create a separate layout cellview which we may use later."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Creating Layout Instance\n",
-    "```python\n",
-    "# add subcell instances\n",
-    "cs_inst = self.add_instance(cs_master, 'XCS')\n",
-    "# add source follower to the right of common source\n",
-    "x0 = cs_inst.bound_box.right_unit\n",
-    "sf_inst = self.add_instance(sf_master, 'XSF', loc=(x0, 0), unit_mode=True)\n",
-    "```\n",
-    "\n",
-    "The `add_instance()` method adds an instance of the given layout master to the current cellview.  By default, if no location or orientation is given, it puts the instance at the origin with no rotation.  the `bound_box` attribute can then be used on the instance to get the bounding box of the instance.  Here, the bounding box is used to determine the X coordinate of the source-follower."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Get Instance Ports\n",
-    "```python\n",
-    "# get subcell ports as WireArrays so we can connect them\n",
-    "vmid0 = cs_inst.get_all_port_pins('vout')[0]\n",
-    "vmid1 = sf_inst.get_all_port_pins('vin')[0]\n",
-    "vdd0 = cs_inst.get_all_port_pins('VDD')[0]\n",
-    "vdd1 = sf_inst.get_all_port_pins('VDD')[0]\n",
-    "```\n",
-    "after adding an instance, the `get_all_port_pins()` function can be used to obtain a list of all pins as `WireArray` objects with the given name.  In this case, we know that there's exactly one pin, so we use Python list indexing to obtain first element of the list."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Routing Grid Object\n",
-    "```python\n",
-    "# get vertical VDD TrackIDs\n",
-    "vdd0_tid = TrackID(vm_layer, self.grid.coord_to_nearest_track(vm_layer, vdd0.middle))\n",
-    "vdd1_tid = TrackID(vm_layer, self.grid.coord_to_nearest_track(vm_layer, vdd1.middle))\n",
-    "```\n",
-    "\n",
-    "the `self.grid` attribute of `TemplateBase` is a `RoutingGrid` objects, which provides many useful functions related to the routing grid.  In this particular scenario, `coord_to_nearest_track()` is used to determine the vertical track index closest to the center of the `VDD` ports.  These vertical tracks will be used later to connect the `VDD` ports together."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Re-export Pins on Instances\n",
-    "```python\n",
-    " # re-export pins on subcells.\n",
-    "self.reexport(cs_inst.get_port('vin'), show=show_pins)\n",
-    "self.reexport(cs_inst.get_port('vbias'), net_name='vb1', show=show_pins)\n",
-    "# TODO: reexport vout and vbias of source follower\n",
-    "# TODO: vbias should be renamed to vb2\n",
-    "```\n",
-    "`TemplateBase` also provides a `reexport()` function, which is a convenience function to re-export an instance port in-place.  The `net_name` optional parameter can be used to change the port name.  In this example, the `vbias` port of common-source amplifier is renamed to `vb1`."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Layout Exercises\n",
-    "Now you should know everything you need to finish the two-stage amplifier layout generator.  Fill in the missing pieces to do the following:\n",
-    "\n",
-    "1. Create layout master for `AmpSF` using the `AmpSFSoln` class.\n",
-    "2. Using `RoutingGrid`, determine the vertical track index in the middle of the two amplifier blocks, and connect `vmid` wires together using this track.\n",
-    "    * Hint: variable `x0` is the X coordinate of the boundary between the two blocks.\n",
-    "3. Re-export `vout` and `vbias` of the source-follower. Rename `vbias` to `vb2`.\n",
-    "\n",
-    "Once you're done, evaluate the cell below, which will generate the layout and run LVS.  If everything is done correctly, a layout should be generated inthe `DEMO_AMP_CHAIN` library, and LVS should pass."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "creating BagProject\n",
-      "computing layout\n",
-      "ext_w0 = 1, ext_wend=6, tot_ntr=19\n",
-      "ext_w0 = 2, ext_wend=2, tot_ntr=18\n",
-      "final: ext_w0 = 2, ext_wend=2, tot_ntr=18\n",
-      "{'s': WireArray(TrackID(layer=3, track=7, num=9, pitch=2), 0.981, 1.136), 'd': WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 1.168, 1.323), 'g': WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 0.791, 0.946)}\n",
-      "WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 0.791, 0.946)\n",
-      "5.5\n",
-      "creating layout\n",
-      "layout done\n",
-      "computing AMP_CHAIN schematics\n"
-     ]
-    },
-    {
-     "ename": "TypeError",
-     "evalue": "design() argument after ** must be a mapping, not NoneType",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-1-f7e0f1af5c7e>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m    134\u001b[0m     \u001b[0mbprj\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbag\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mBagProject\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    135\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 136\u001b[1;33m \u001b[0mdemo_core\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_flow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbprj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtop_specs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'amp_chain_soln'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mAmpChain\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrun_lvs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlvs_only\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;32m/tools/projects/erichang/bag_gen/BAG2_cds_ff_mpt/BAG_XBase_demo/xbase_demo/core.py\u001b[0m in \u001b[0;36mrun_flow\u001b[1;34m(prj, specs, dsn_name, lay_cls, sch_cls, run_lvs, lvs_only)\u001b[0m\n\u001b[0;32m    375\u001b[0m     \u001b[0mdsn_sch_params\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgen_layout\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mspecs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdsn_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlay_cls\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    376\u001b[0m     \u001b[1;31m# generate design/testbench schematics\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 377\u001b[1;33m     \u001b[0mgen_schematics\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mspecs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdsn_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdsn_sch_params\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msch_cls\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msch_cls\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcheck_lvs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mrun_lvs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlvs_only\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlvs_only\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    378\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    379\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlvs_only\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;32m/tools/projects/erichang/bag_gen/BAG2_cds_ff_mpt/BAG_XBase_demo/xbase_demo/core.py\u001b[0m in \u001b[0;36mgen_schematics\u001b[1;34m(prj, specs, dsn_name, sch_params, sch_cls, check_lvs, lvs_only)\u001b[0m\n\u001b[0;32m     99\u001b[0m         \u001b[0mdsn\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mprj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcreate_design_module\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msch_lib\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msch_cell\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    100\u001b[0m         \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'computing %s schematics'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[0mgen_cell\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 101\u001b[1;33m         \u001b[0mdsn\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdesign\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0msch_params\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    102\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    103\u001b[0m         \u001b[0mdsn\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mprj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnew_schematic_instance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlib_name\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msch_lib\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcell_name\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msch_cell\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msch_params\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msch_cls\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msch_cls\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mTypeError\u001b[0m: design() argument after ** must be a mapping, not NoneType"
-     ]
-    }
-   ],
-   "source": [
-    "from bag.layout.routing import TrackID\n",
-    "from bag.layout.template import TemplateBase\n",
-    "\n",
-    "from xbase_demo.demo_layout.core import AmpCS, AmpSFSoln\n",
-    "\n",
-    "\n",
-    "class AmpChain(TemplateBase):\n",
-    "    def __init__(self, temp_db, lib_name, params, used_names, **kwargs):\n",
-    "        TemplateBase.__init__(self, temp_db, lib_name, params, used_names, **kwargs)\n",
-    "        self._sch_params = None\n",
-    "\n",
-    "    @property\n",
-    "    def sch_params(self):\n",
-    "        return self._sch_params\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        return dict(\n",
-    "            cs_params='common source amplifier parameters.',\n",
-    "            sf_params='source follower parameters.',\n",
-    "            show_pins='True to draw pin geometries.',\n",
-    "        )\n",
-    "\n",
-    "    def draw_layout(self):\n",
-    "        \"\"\"Draw the layout of a transistor for characterization.\n",
-    "        \"\"\"\n",
-    "\n",
-    "        # make copies of given dictionaries to avoid modifying external data.\n",
-    "        cs_params = self.params['cs_params'].copy()\n",
-    "        sf_params = self.params['sf_params'].copy()\n",
-    "        show_pins = self.params['show_pins']\n",
-    "\n",
-    "        # disable pins in subcells\n",
-    "        cs_params['show_pins'] = False\n",
-    "        sf_params['show_pins'] = False\n",
-    "\n",
-    "        # create layout masters for subcells we will add later\n",
-    "        cs_master = self.new_template(params=cs_params, temp_cls=AmpCS)\n",
-    "        # TODO: create sf_master.  Use AmpSFSoln class\n",
-    "        sf_master = None\n",
-    "\n",
-    "        if sf_master is None:\n",
-    "            return\n",
-    "\n",
-    "        # add subcell instances\n",
-    "        cs_inst = self.add_instance(cs_master, 'XCS')\n",
-    "        # add source follower to the right of common source\n",
-    "        x0 = cs_inst.bound_box.right_unit\n",
-    "        sf_inst = self.add_instance(sf_master, 'XSF', loc=(x0, 0), unit_mode=True)\n",
-    "\n",
-    "        # get VSS wires from AmpCS/AmpSF\n",
-    "        cs_vss_warr = cs_inst.get_all_port_pins('VSS')[0]\n",
-    "        sf_vss_warrs = sf_inst.get_all_port_pins('VSS')\n",
-    "        # only connect bottom VSS wire of source follower\n",
-    "        if len(sf_vss_warrs) < 2 or sf_vss_warrs[0].track_id.base_index < sf_vss_warrs[1].track_id.base_index:\n",
-    "            sf_vss_warr = sf_vss_warrs[0]\n",
-    "        else:\n",
-    "            sf_vss_warr = sf_vss_warrs[1]\n",
-    "\n",
-    "        # connect VSS of the two blocks together\n",
-    "        vss = self.connect_wires([cs_vss_warr, sf_vss_warr])[0]\n",
-    "\n",
-    "        # get layer IDs from VSS wire\n",
-    "        hm_layer = vss.layer_id\n",
-    "        vm_layer = hm_layer + 1\n",
-    "        top_layer = vm_layer + 1\n",
-    "\n",
-    "        # calculate template size\n",
-    "        tot_box = cs_inst.bound_box.merge(sf_inst.bound_box)\n",
-    "        self.set_size_from_bound_box(top_layer, tot_box, round_up=True)\n",
-    "\n",
-    "        # get subcell ports as WireArrays so we can connect them\n",
-    "        vmid0 = cs_inst.get_all_port_pins('vout')[0]\n",
-    "        vmid1 = sf_inst.get_all_port_pins('vin')[0]\n",
-    "        vdd0 = cs_inst.get_all_port_pins('VDD')[0]\n",
-    "        vdd1 = sf_inst.get_all_port_pins('VDD')[0]\n",
-    "\n",
-    "        # get vertical VDD TrackIDs\n",
-    "        vdd0_tid = TrackID(vm_layer, self.grid.coord_to_nearest_track(vm_layer, vdd0.middle))\n",
-    "        vdd1_tid = TrackID(vm_layer, self.grid.coord_to_nearest_track(vm_layer, vdd1.middle))\n",
-    "\n",
-    "        # connect VDD of each block to vertical M5\n",
-    "        vdd0 = self.connect_to_tracks(vdd0, vdd0_tid)\n",
-    "        vdd1 = self.connect_to_tracks(vdd1, vdd1_tid)\n",
-    "        # connect M5 VDD to top M6 horizontal track\n",
-    "        vdd_tidx = self.grid.get_num_tracks(self.size, top_layer) - 1\n",
-    "        vdd_tid = TrackID(top_layer, vdd_tidx)\n",
-    "        vdd = self.connect_to_tracks([vdd0, vdd1], vdd_tid)\n",
-    "\n",
-    "        # TODO: connect vmid0 and vmid1 to vertical track in the middle of two templates\n",
-    "        # hint: use x0\n",
-    "        vmid = None\n",
-    "\n",
-    "        if vmid is None:\n",
-    "            return\n",
-    "\n",
-    "        # add pins on wires\n",
-    "        self.add_pin('vmid', vmid, show=show_pins)\n",
-    "        self.add_pin('VDD', vdd, show=show_pins)\n",
-    "        self.add_pin('VSS', vss, show=show_pins)\n",
-    "        # re-export pins on subcells.\n",
-    "        self.reexport(cs_inst.get_port('vin'), show=show_pins)\n",
-    "        self.reexport(cs_inst.get_port('vbias'), net_name='vb1', show=show_pins)\n",
-    "        # TODO: reexport vout and vbias of source follower\n",
-    "        # TODO: vbias should be renamed to vb2\n",
-    "\n",
-    "        # compute schematic parameters.\n",
-    "        self._sch_params = dict(\n",
-    "            cs_params=cs_master.sch_params,\n",
-    "            sf_params=sf_master.sch_params,\n",
-    "        )\n",
-    "\n",
-    "\n",
-    "import os\n",
-    "\n",
-    "# import bag package\n",
-    "import bag\n",
-    "from bag.io import read_yaml\n",
-    "\n",
-    "# import BAG demo Python modules\n",
-    "import xbase_demo.core as demo_core\n",
-    "\n",
-    "# load circuit specifications from file\n",
-    "spec_fname = os.path.join(os.environ['BAG_WORK_DIR'], 'specs_demo/demo.yaml')\n",
-    "top_specs = read_yaml(spec_fname)\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "\n",
-    "demo_core.run_flow(bprj, top_specs, 'amp_chain_soln', AmpChain, run_lvs=True, lvs_only=True)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## AmpChain Schematic Template\n",
-    "Now let's move on to schematic generator.  As before, we need to create the schematic template first.  A half-complete schematic template is provided for you in library `demo_templates`, cell `amp_chain`, shown below:\n",
-    "<img src=\"bootcamp_pics/5_hierarchical_generator/hierachical_generator_2.PNG\" alt=\"Drawing\" style=\"width: 400px;\"/>\n",
-    "\n",
-    "The schematic template for a hierarchical generator is very simple; you simply need to instantiate the schematic templates of the sub-blocks (***Not the generated schematic!***).  For the exercise, instantiate the `amp_sf` schematic template from the `demo_templates` library, named it `XSF`, connect it, then evaluate the following cell to import the `amp_chain` netlist to Python.\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 11,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "using existing BagProject\n",
-      "importing netlist from virtuoso\n",
-      "netlist import done\n"
-     ]
-    }
-   ],
-   "source": [
-    "import bag\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "    \n",
-    "print('importing netlist from virtuoso')\n",
-    "bprj.import_design_library('demo_templates')\n",
-    "print('netlist import done')"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## AmpChain Schematic Generator\n",
-    "With schematic template done, you are ready to write the schematic generator.  It is also very simple, you just need to call the `design()` method, which you implemented previously, on each instance in the schematic.  Complete the following schematic generator, then evaluate the cell to push it through the design flow."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "using existing BagProject\n",
-      "computing layout\n",
-      "ext_w0 = 1, ext_wend=6, tot_ntr=19\n",
-      "ext_w0 = 2, ext_wend=2, tot_ntr=18\n",
-      "final: ext_w0 = 2, ext_wend=2, tot_ntr=18\n",
-      "{'s': WireArray(TrackID(layer=3, track=7, num=9, pitch=2), 0.981, 1.136), 'd': WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 1.168, 1.323), 'g': WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 0.791, 0.946)}\n",
-      "WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 0.791, 0.946)\n",
-      "5.5\n",
-      "ext_w0 = 1, ext_wend=9, tot_ntr=20\n",
-      "ext_w0 = 2, ext_wend=8, tot_ntr=20\n",
-      "ext_w0 = 4, ext_wend=9, tot_ntr=21\n",
-      "final: ext_w0 = 2, ext_wend=8, tot_ntr=20\n",
-      "creating layout\n",
-      "layout done\n",
-      "creating AMP_CHAIN schematics\n",
-      "running lvs\n",
-      "Running tasks, Press Ctrl-C to cancel.\n"
-     ]
-    },
-    {
-     "ename": "ValueError",
-     "evalue": "LVS failed.  check log file: /tools/projects/erichang/bag_gen/BAG2_cds_ff_mpt/pvs_run/lvs_run_dir/DEMO_AMP_CHAIN/AMP_CHAIN/lvsLog_20171128_0009272slvfabd",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-2-84e11b8fc0cb>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m     61\u001b[0m     \u001b[0mbprj\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbag\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mBagProject\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     62\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 63\u001b[1;33m \u001b[0mdemo_core\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_flow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbprj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtop_specs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'amp_chain'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mAmpChainSoln\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msch_cls\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdemo_templates__amp_chain\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrun_lvs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;32m/tools/projects/erichang/bag_gen/BAG2_cds_ff_mpt/BAG_XBase_demo/xbase_demo/core.py\u001b[0m in \u001b[0;36mrun_flow\u001b[1;34m(prj, specs, dsn_name, lay_cls, sch_cls, run_lvs, lvs_only)\u001b[0m\n\u001b[0;32m    375\u001b[0m     \u001b[0mdsn_sch_params\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgen_layout\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mspecs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdsn_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlay_cls\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    376\u001b[0m     \u001b[1;31m# generate design/testbench schematics\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 377\u001b[1;33m     \u001b[0mgen_schematics\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mspecs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdsn_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdsn_sch_params\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msch_cls\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msch_cls\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcheck_lvs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mrun_lvs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlvs_only\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlvs_only\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    378\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    379\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlvs_only\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;32m/tools/projects/erichang/bag_gen/BAG2_cds_ff_mpt/BAG_XBase_demo/xbase_demo/core.py\u001b[0m in \u001b[0;36mgen_schematics\u001b[1;34m(prj, specs, dsn_name, sch_params, sch_cls, check_lvs, lvs_only)\u001b[0m\n\u001b[0;32m    112\u001b[0m         \u001b[0mlvs_passed\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlvs_log\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mprj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_lvs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimpl_lib\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mgen_cell\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    113\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mlvs_passed\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 114\u001b[1;33m             \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'LVS failed.  check log file: %s'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[0mlvs_log\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    115\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    116\u001b[0m             \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'lvs passed'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mValueError\u001b[0m: LVS failed.  check log file: /tools/projects/erichang/bag_gen/BAG2_cds_ff_mpt/pvs_run/lvs_run_dir/DEMO_AMP_CHAIN/AMP_CHAIN/lvsLog_20171128_0009272slvfabd"
-     ]
-    }
-   ],
-   "source": [
-    "%matplotlib inline\n",
-    "\n",
-    "import os\n",
-    "\n",
-    "from bag.design import Module\n",
-    "\n",
-    "\n",
-    "# noinspection PyPep8Naming\n",
-    "class demo_templates__amp_chain(Module):\n",
-    "    \"\"\"Module for library demo_templates cell amp_chain.\n",
-    "\n",
-    "    Fill in high level description here.\n",
-    "    \"\"\"\n",
-    "\n",
-    "    # hard coded netlist flie path to get jupyter notebook working.\n",
-    "    yaml_file = os.path.join(os.environ['BAG_WORK_DIR'], 'BAG_XBase_demo', \n",
-    "                             'BagModules', 'demo_templates', 'netlist_info', 'amp_chain.yaml') \n",
-    "\n",
-    "    def __init__(self, bag_config, parent=None, prj=None, **kwargs):\n",
-    "        Module.__init__(self, bag_config, self.yaml_file, parent=parent, prj=prj, **kwargs)\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        # type: () -> Dict[str, str]\n",
-    "        \"\"\"Returns a dictionary from parameter names to descriptions.\n",
-    "\n",
-    "        Returns\n",
-    "        -------\n",
-    "        param_info : Optional[Dict[str, str]]\n",
-    "            dictionary from parameter names to descriptions.\n",
-    "        \"\"\"\n",
-    "        return dict(\n",
-    "            cs_params='common-source amplifier parameters dictionary.',\n",
-    "            sf_params='source-follwer amplifier parameters dictionary.',\n",
-    "        )\n",
-    "        \n",
-    "    def design(self, cs_params=None, sf_params=None):\n",
-    "        self.instances['XCS'].design(**cs_params)\n",
-    "        # TODO: design XSF\n",
-    "\n",
-    "        \n",
-    "import os\n",
-    "\n",
-    "# import bag package\n",
-    "import bag\n",
-    "from bag.io import read_yaml\n",
-    "\n",
-    "# import BAG demo Python modules\n",
-    "import xbase_demo.core as demo_core\n",
-    "from xbase_demo.demo_layout.core import AmpChainSoln\n",
-    "\n",
-    "# load circuit specifications from file\n",
-    "spec_fname = os.path.join(os.environ['BAG_WORK_DIR'], 'specs_demo/demo.yaml')\n",
-    "top_specs = read_yaml(spec_fname)\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "\n",
-    "demo_core.run_flow(bprj, top_specs, 'amp_chain', AmpChainSoln, sch_cls=demo_templates__amp_chain, run_lvs=True)"
-   ]
-  }
- ],
- "metadata": {
-  "anaconda-cloud": {},
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.5"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/workspace_setup/tutorial_files/6_MOSDBDiscrete.ipynb b/workspace_setup/tutorial_files/6_MOSDBDiscrete.ipynb
deleted file mode 100644
index e270106..0000000
--- a/workspace_setup/tutorial_files/6_MOSDBDiscrete.ipynb
+++ /dev/null
@@ -1,251 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# MOSDBDiscrete\n",
-    "In this module, we will have a brief overview of the `MOSDBDiscrete` class, which manages a transistor characterization database and provide methods for designers to query transistor small signal parameters."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## MOSDBDiscrete example\n",
-    "To use the transistor characterization database, evaluate the following cell, which defines two methods, `query()` and `plot_data()`."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%matplotlib inline\n",
-    "\n",
-    "import os\n",
-    "import pprint\n",
-    "\n",
-    "import numpy as np\n",
-    "import matplotlib.pyplot as plt\n",
-    "# noinspection PyUnresolvedReferences\n",
-    "from mpl_toolkits.mplot3d import Axes3D\n",
-    "from matplotlib import cm\n",
-    "from matplotlib import ticker\n",
-    "\n",
-    "from verification_ec.mos.query import MOSDBDiscrete\n",
-    "\n",
-    "interp_method = 'spline'\n",
-    "spec_file = os.path.join(os.environ['BAG_WORK_DIR'], 'demo_data', 'mos_char_nch', 'specs.yaml')\n",
-    "env_default = 'tt'\n",
-    "intent = 'standard'\n",
-    "\n",
-    "\n",
-    "def query(vgs=None, vds=None, vbs=0.0, vstar=None, env_list=None):\n",
-    "    \"\"\"Get interpolation function and plot/query.\"\"\"\n",
-    "\n",
-    "    spec_list = [spec_file]\n",
-    "    if env_list is None:\n",
-    "        env_list = [env_default]\n",
-    "\n",
-    "    # initialize transistor database from simulation data\n",
-    "    nch_db = MOSDBDiscrete(spec_list, interp_method=interp_method)\n",
-    "    # set process corners\n",
-    "    nch_db.env_list = env_list\n",
-    "    # set layout parameters\n",
-    "    nch_db.set_dsn_params(intent=intent)\n",
-    "    # returns a dictionary of smal-signal parameters\n",
-    "    return nch_db.query(vbs=vbs, vds=vds, vgs=vgs, vstar=vstar)\n",
-    "\n",
-    "\n",
-    "def plot_data(name='ibias', bounds=None, unit_val=None, unit_label=None):\n",
-    "    \"\"\"Get interpolation function and plot/query.\"\"\"\n",
-    "    env_list = [env_default]\n",
-    "    vbs = 0.0\n",
-    "    nvds = 41\n",
-    "    nvgs = 81\n",
-    "    spec_list = [spec_file]\n",
-    "\n",
-    "    print('create transistor database')\n",
-    "    nch_db = MOSDBDiscrete(spec_list, interp_method=interp_method)\n",
-    "    nch_db.env_list = env_list\n",
-    "    nch_db.set_dsn_params(intent=intent)\n",
-    "\n",
-    "    f = nch_db.get_function(name)\n",
-    "    vds_min, vds_max = f.get_input_range(1)\n",
-    "    vgs_min, vgs_max = f.get_input_range(2)\n",
-    "    if bounds is not None:\n",
-    "        if 'vgs' in bounds:\n",
-    "            v0, v1 = bounds['vgs']\n",
-    "            if v0 is not None:\n",
-    "                vgs_min = max(vgs_min, v0)\n",
-    "            if v1 is not None:\n",
-    "                vgs_max = min(vgs_max, v1)\n",
-    "        if 'vds' in bounds:\n",
-    "            v0, v1 = bounds['vds']\n",
-    "            if v0 is not None:\n",
-    "                vds_min = max(vds_min, v0)\n",
-    "            if v1 is not None:\n",
-    "                vds_max = min(vds_max, v1)\n",
-    "\n",
-    "    # query values.\n",
-    "    vds_test = (vds_min + vds_max) / 2\n",
-    "    vgs_test = (vgs_min + vgs_max) / 2\n",
-    "    pprint.pprint(nch_db.query(vbs=vbs, vds=vds_test, vgs=vgs_test))\n",
-    "\n",
-    "    vbs_vec = [vbs]\n",
-    "    vds_vec = np.linspace(vds_min, vds_max, nvds, endpoint=True)\n",
-    "    vgs_vec = np.linspace(vgs_min, vgs_max, nvgs, endpoint=True)\n",
-    "    vbs_mat, vds_mat, vgs_mat = np.meshgrid(vbs_vec, vds_vec, vgs_vec, indexing='ij', copy=False)\n",
-    "    arg = np.stack((vbs_mat, vds_mat, vgs_mat), axis=-1)\n",
-    "    ans = f(arg)\n",
-    "\n",
-    "    vds_mat = vds_mat.reshape((nvds, nvgs))\n",
-    "    vgs_mat = vgs_mat.reshape((nvds, nvgs))\n",
-    "    ans = ans.reshape((nvds, nvgs, len(env_list)))\n",
-    "\n",
-    "    formatter = ticker.ScalarFormatter(useMathText=True)\n",
-    "    formatter.set_scientific(True)\n",
-    "    formatter.set_powerlimits((-2, 3))\n",
-    "    if unit_label is not None:\n",
-    "        zlabel = '%s (%s)' % (name, unit_label)\n",
-    "    else:\n",
-    "        zlabel = name\n",
-    "    for idx, env in enumerate(env_list):\n",
-    "        fig = plt.figure(idx + 1)\n",
-    "        ax = fig.add_subplot(111, projection='3d')\n",
-    "        cur_val = ans[..., idx]\n",
-    "        if unit_val is not None:\n",
-    "            cur_val = cur_val / unit_val\n",
-    "        ax.plot_surface(vds_mat, vgs_mat, cur_val, rstride=1, cstride=1, linewidth=0, cmap=cm.cubehelix)\n",
-    "        ax.set_title('%s (corner=%s)' % (name, env))\n",
-    "        ax.set_xlabel('Vds (V)')\n",
-    "        ax.set_ylabel('Vgs (V)')\n",
-    "        ax.set_zlabel(zlabel)\n",
-    "        ax.w_zaxis.set_major_formatter(formatter)\n",
-    "\n",
-    "    plt.show()\n"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Querying Small-Signal Parameters\n",
-    "To lookup transistor small signal parameters given a bias point, use the `query()` method by evaluating the following cell.  Feel free to play around with the numbers."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "{'cdb': 6.248976739750922e-17,\n",
-       " 'cdd': 2.0328230225209543e-16,\n",
-       " 'cds': -2.4163000626635453e-17,\n",
-       " 'cgb': 9.966702597590937e-19,\n",
-       " 'cgd': 1.6495553548122168e-16,\n",
-       " 'cgg': 3.6228642234598553e-16,\n",
-       " 'cgs': 1.9633421660500474e-16,\n",
-       " 'csb': 1.1021134465725374e-16,\n",
-       " 'css': 2.82382560635623e-16,\n",
-       " 'gb': 1.983603067386341e-05,\n",
-       " 'gds': 4.719944723025589e-06,\n",
-       " 'gm': 9.49214016617884e-05,\n",
-       " 'ibias': 1.2299113540770929e-05,\n",
-       " 'vstar': 0.25914310841286414,\n",
-       " 'vgs': 0.4,\n",
-       " 'vds': 0.5,\n",
-       " 'vbs': 0.0}"
-      ]
-     },
-     "execution_count": 2,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "query(vgs=0.4, vds=0.5, vbs=0.0)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Plotting Small-Signal Parameters\n",
-    "`MOSDBDiscrete` stores each small signal parameter as a continuous function interpolated from simulation data.  This makes it easy to manipulate those functions directly (such as using an optimization solver).  For a simple example, the `plot_data()` method simply plots the functions versus $V_{gs}$ and $V_{ds}$.  Evaluate the following cell to see plots of various different small signal parameters."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "create transistor database\n",
-      "{'cdb': 6.40259557187212e-17,\n",
-      " 'cdd': 2.0379145885397679e-16,\n",
-      " 'cds': -3.5466715265482257e-17,\n",
-      " 'cgb': 1.5429673845401091e-18,\n",
-      " 'cgd': 1.7523221840073783e-16,\n",
-      " 'cgg': 3.827084324971782e-16,\n",
-      " 'cgs': 2.0593324671190025e-16,\n",
-      " 'csb': 1.0744529426477165e-16,\n",
-      " 'css': 2.7791182571118964e-16,\n",
-      " 'gb': 3.648119000000001e-05,\n",
-      " 'gds': 7.598960000000004e-06,\n",
-      " 'gm': 0.00016568942500000004,\n",
-      " 'ibias': 3.931712000000002e-05,\n",
-      " 'vbs': 0.0,\n",
-      " 'vds': 0.5025,\n",
-      " 'vgs': 0.6040000000000001,\n",
-      " 'vstar': 0.4745881639700302}\n"
-     ]
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%matplotlib inline\n",
-    "\n",
-    "plot_data(name='ibias')"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.5"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_1.png b/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_1.png
deleted file mode 100644
index 16b9fc2..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_1.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_2.png b/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_2.png
deleted file mode 100644
index 8463792..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_2.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_3.png b/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_3.png
deleted file mode 100644
index dcc3e72..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_3.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_4.png b/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_4.png
deleted file mode 100644
index 18bff8b..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/1_flow_demo/flow_demo_4.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/2_xbase_routing/xbase_routing_1.png b/workspace_setup/tutorial_files/bootcamp_pics/2_xbase_routing/xbase_routing_1.png
deleted file mode 100644
index 96f98a9..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/2_xbase_routing/xbase_routing_1.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/2_xbase_routing/xbase_routing_2.png b/workspace_setup/tutorial_files/bootcamp_pics/2_xbase_routing/xbase_routing_2.png
deleted file mode 100644
index a3d7aa4..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/2_xbase_routing/xbase_routing_2.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/2_xbase_routing/xbase_routing_3.png b/workspace_setup/tutorial_files/bootcamp_pics/2_xbase_routing/xbase_routing_3.png
deleted file mode 100644
index 9b7ab1e..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/2_xbase_routing/xbase_routing_3.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_1.png b/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_1.png
deleted file mode 100644
index 97129cc..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_1.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_2.png b/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_2.png
deleted file mode 100644
index dc55bab..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_2.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_3.png b/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_3.png
deleted file mode 100644
index 3dfec20..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_3.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_4.png b/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_4.png
deleted file mode 100644
index 0cc6b6b..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_4.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_5.png b/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_5.png
deleted file mode 100644
index db7654d..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_5.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_6.png b/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_6.png
deleted file mode 100644
index eeecb60..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_6.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_7.png b/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_7.png
deleted file mode 100644
index 2d1dbb3..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_7.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_8.png b/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_8.png
deleted file mode 100644
index 30713eb..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_8.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_9.png b/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_9.png
deleted file mode 100644
index a2d5642..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/3_analogbase/analogbase_9.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/5_hierarchical_generator/hierachical_generator_1.png b/workspace_setup/tutorial_files/bootcamp_pics/5_hierarchical_generator/hierachical_generator_1.png
deleted file mode 100644
index 187ab66..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/5_hierarchical_generator/hierachical_generator_1.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/bootcamp_pics/5_hierarchical_generator/hierachical_generator_2.png b/workspace_setup/tutorial_files/bootcamp_pics/5_hierarchical_generator/hierachical_generator_2.png
deleted file mode 100644
index 4cde866..0000000
--- a/workspace_setup/tutorial_files/bootcamp_pics/5_hierarchical_generator/hierachical_generator_2.png
+++ /dev/null
Binary files differ
diff --git a/workspace_setup/tutorial_files/solutions/3_analogbase.ipynb b/workspace_setup/tutorial_files/solutions/3_analogbase.ipynb
deleted file mode 100644
index 0aa465d..0000000
--- a/workspace_setup/tutorial_files/solutions/3_analogbase.ipynb
+++ /dev/null
@@ -1,224 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## SF Amplifier Solution\n",
-    "\n",
-    "The following cell contains the source-follwer amplifier layout solution.  If you evaluate the following cell LVS should pass."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "using existing BagProject\n",
-      "computing layout\n",
-      "ext_w0 = 1, ext_wend=7, ytop=2880\n",
-      "ext_w0 = 2, ext_wend=9, ytop=3024\n",
-      "final: ext_w0 = 1, ext_wend=7, ytop=2880\n",
-      "creating layout\n",
-      "layout done\n",
-      "computing AMP_SF schematics\n",
-      "creating AMP_SF schematics\n",
-      "running lvs\n",
-      "Running tasks, Press Ctrl-C to cancel.\n",
-      "lvs passed\n",
-      "lvs log is /users/erichang/projects/bag_gen/BAG2_cds_ff_mpt/pvs_run/lvs_run_dir/DEMO_AMP_SF/AMP_SF/lvsLog_20180906_110128hvrv5244\n",
-      "LVS flow done\n"
-     ]
-    }
-   ],
-   "source": [
-    "from abs_templates_ec.analog_core import AnalogBase\n",
-    "\n",
-    "\n",
-    "\n",
-    "class AmpSF(AnalogBase):\n",
-    "    \"\"\"A template of a single transistor with dummies.\n",
-    "\n",
-    "    This class is mainly used for transistor characterization or\n",
-    "    design exploration with config views.\n",
-    "\n",
-    "    Parameters\n",
-    "    ----------\n",
-    "    temp_db : :class:`bag.layout.template.TemplateDB`\n",
-    "            the template database.\n",
-    "    lib_name : str\n",
-    "        the layout library name.\n",
-    "    params : dict[str, any]\n",
-    "        the parameter values.\n",
-    "    used_names : set[str]\n",
-    "        a set of already used cell names.\n",
-    "    kwargs : dict[str, any]\n",
-    "        dictionary of optional parameters.  See documentation of\n",
-    "        :class:`bag.layout.template.TemplateBase` for details.\n",
-    "    \"\"\"\n",
-    "\n",
-    "    def __init__(self, temp_db, lib_name, params, used_names, **kwargs):\n",
-    "        AnalogBase.__init__(self, temp_db, lib_name, params, used_names, **kwargs)\n",
-    "        self._sch_params = None\n",
-    "\n",
-    "    @property\n",
-    "    def sch_params(self):\n",
-    "        return self._sch_params\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        \"\"\"Returns a dictionary containing parameter descriptions.\n",
-    "\n",
-    "        Override this method to return a dictionary from parameter names to descriptions.\n",
-    "\n",
-    "        Returns\n",
-    "        -------\n",
-    "        param_info : dict[str, str]\n",
-    "            dictionary from parameter name to description.\n",
-    "        \"\"\"\n",
-    "        return dict(\n",
-    "            lch='channel length, in meters.',\n",
-    "            w_dict='width dictionary.',\n",
-    "            intent_dict='intent dictionary.',\n",
-    "            fg_dict='number of fingers dictionary.',\n",
-    "            ndum='number of dummies on each side.',\n",
-    "            ptap_w='NMOS substrate width, in meters/number of fins.',\n",
-    "            ntap_w='PMOS substrate width, in meters/number of fins.',\n",
-    "            show_pins='True to draw pin geometries.',\n",
-    "        )\n",
-    "\n",
-    "    def draw_layout(self):\n",
-    "        \"\"\"Draw the layout of a transistor for characterization.\n",
-    "        \"\"\"\n",
-    "\n",
-    "        lch = self.params['lch']\n",
-    "        w_dict = self.params['w_dict']\n",
-    "        intent_dict = self.params['intent_dict']\n",
-    "        fg_dict = self.params['fg_dict']\n",
-    "        ndum = self.params['ndum']\n",
-    "        ptap_w = self.params['ptap_w']\n",
-    "        ntap_w = self.params['ntap_w']\n",
-    "        show_pins = self.params['show_pins']\n",
-    "\n",
-    "        fg_amp = fg_dict['amp']\n",
-    "        fg_bias = fg_dict['bias']\n",
-    "\n",
-    "        if fg_bias % 2 != 0 or fg_amp % 2 != 0:\n",
-    "            raise ValueError('fg_bias=%d and fg_amp=%d must all be even.' % (fg_bias, fg_amp))\n",
-    "\n",
-    "        fg_half_bias = fg_bias // 2\n",
-    "        fg_half_amp = fg_amp // 2\n",
-    "        fg_half = max(fg_half_bias, fg_half_amp)\n",
-    "        fg_tot = (fg_half + ndum) * 2\n",
-    "\n",
-    "        nw_list = [w_dict['bias'], w_dict['amp']]\n",
-    "        nth_list = [intent_dict['bias'], intent_dict['amp']]\n",
-    "\n",
-    "        ng_tracks = [1, 3]\n",
-    "        nds_tracks = [1, 1]\n",
-    "\n",
-    "        n_orient = ['R0', 'MX']\n",
-    "\n",
-    "        self.draw_base(lch, fg_tot, ptap_w, ntap_w, nw_list,\n",
-    "                       nth_list, [], [],\n",
-    "                       ng_tracks=ng_tracks, nds_tracks=nds_tracks,\n",
-    "                       pg_tracks=[], pds_tracks=[],\n",
-    "                       n_orientations=n_orient,\n",
-    "                       )\n",
-    "\n",
-    "        if (fg_amp - fg_bias) % 4 == 0:\n",
-    "            s_net, d_net = 'VDD', 'vout'\n",
-    "            aout, aoutb, nsdir, nddir = 'd', 's', 2, 0\n",
-    "        else:\n",
-    "            s_net, d_net = 'vout', 'VDD'\n",
-    "            aout, aoutb, nsdir, nddir = 's', 'd', 0, 2\n",
-    "\n",
-    "        bias_col = ndum + fg_half - fg_half_bias\n",
-    "        amp_col = ndum + fg_half - fg_half_amp\n",
-    "        amp_ports = self.draw_mos_conn('nch', 1, amp_col, fg_amp, nsdir, nddir,\n",
-    "                                       s_net=s_net, d_net=d_net)\n",
-    "        bias_ports = self.draw_mos_conn('nch', 0, bias_col, fg_bias, 0, 2,\n",
-    "                                        s_net='', d_net='vout')\n",
-    "\n",
-    "        vdd_tid = self.make_track_id('nch', 1, 'g', 0)\n",
-    "        vin_tid = self.make_track_id('nch', 1, 'g', 2)\n",
-    "        vout_tid = self.make_track_id('nch', 0, 'ds', 0)\n",
-    "        vbias_tid = self.make_track_id('nch', 0, 'g', 0)\n",
-    "\n",
-    "        vin_warr = self.connect_to_tracks(amp_ports['g'], vin_tid)\n",
-    "        vout_warr = self.connect_to_tracks([amp_ports[aout], bias_ports['d']], vout_tid)\n",
-    "        vbias_warr = self.connect_to_tracks(bias_ports['g'], vbias_tid)\n",
-    "        vdd_warr = self.connect_to_tracks(amp_ports[aoutb], vdd_tid)\n",
-    "        self.connect_to_substrate('ptap', bias_ports['s'])\n",
-    "\n",
-    "        vss_warrs, _ = self.fill_dummy()\n",
-    "\n",
-    "        self.add_pin('VSS', vss_warrs, show=show_pins)\n",
-    "        self.add_pin('VDD', vdd_warr, show=show_pins)\n",
-    "        self.add_pin('vin', vin_warr, show=show_pins)\n",
-    "        self.add_pin('vout', vout_warr, show=show_pins)\n",
-    "        self.add_pin('vbias', vbias_warr, show=show_pins)\n",
-    "\n",
-    "        self._sch_params = dict(\n",
-    "            lch=lch,\n",
-    "            w_dict=w_dict,\n",
-    "            intent_dict=intent_dict,\n",
-    "            fg_dict=fg_dict,\n",
-    "            dum_info=self.get_sch_dummy_info(),\n",
-    "        )\n",
-    "\n",
-    "\n",
-    "import os\n",
-    "\n",
-    "# import bag package\n",
-    "import bag\n",
-    "from bag.io import read_yaml\n",
-    "\n",
-    "# import BAG demo Python modules\n",
-    "import xbase_demo.core as demo_core\n",
-    "from xbase_demo.demo_layout.core import AmpSFSoln\n",
-    "\n",
-    "# load circuit specifications from file\n",
-    "spec_fname = os.path.join(os.environ['BAG_WORK_DIR'], 'specs_demo/demo.yaml')\n",
-    "top_specs = read_yaml(spec_fname)\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "\n",
-    "demo_core.run_flow(bprj, top_specs, 'amp_sf_soln', AmpSF, run_lvs=True, lvs_only=True)"
-   ]
-  }
- ],
- "metadata": {
-  "anaconda-cloud": {},
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.5"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/workspace_setup/tutorial_files/solutions/4_schematic.ipynb b/workspace_setup/tutorial_files/solutions/4_schematic.ipynb
deleted file mode 100644
index f850568..0000000
--- a/workspace_setup/tutorial_files/solutions/4_schematic.ipynb
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {
-    "collapsed": true
-   },
-   "source": [
-    "## AmpSF schematic generator solution\n",
-    "The follow cell contains the solution for AmpSF schematic generator.  you should be able to evaluate it and run the flow.  Note that it uses `amp_sf_soln` schematic template instead of the `amp_sf` schematic template you meant to fill out.  If you wish to debug your schematic template, you can change `amp_sf_soln` to `amp_sf` in the `yaml_file` class variable."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "using existing BagProject\n",
-      "computing layout\n",
-      "ext_w0 = 1, ext_wend=7, ytop=2880\n",
-      "ext_w0 = 2, ext_wend=9, ytop=3024\n",
-      "final: ext_w0 = 1, ext_wend=7, ytop=2880\n",
-      "creating layout\n",
-      "layout done\n",
-      "creating AMP_SF schematics\n",
-      "running lvs\n",
-      "Running tasks, Press Ctrl-C to cancel.\n",
-      "lvs passed\n",
-      "lvs log is /users/erichang/projects/bag_gen/BAG2_cds_ff_mpt/pvs_run/lvs_run_dir/DEMO_AMP_SF/AMP_SF/lvsLog_20180906_111315b1mh7xr5\n",
-      "computing AMP_SF_tb_dc schematics\n",
-      "creating AMP_SF_tb_dc schematics\n",
-      "computing AMP_SF_tb_ac_tran schematics\n",
-      "creating AMP_SF_tb_ac_tran schematics\n",
-      "schematic done\n",
-      "setting up AMP_SF_tb_dc\n",
-      "running simulation\n",
-      "Running tasks, Press Ctrl-C to cancel.\n",
-      "simulation done, load results\n",
-      "setting up AMP_SF_tb_ac_tran\n",
-      "running simulation\n",
-      "Running tasks, Press Ctrl-C to cancel.\n",
-      "simulation done, load results\n",
-      "all simulation done\n",
-      "loading simulation data for AMP_SF_tb_dc\n",
-      "loading simulation data for AMP_SF_tb_ac_tran\n",
-      "finish loading data\n",
-      ", gain=0.05005\n",
-      ", f_3db=1.124e+10, f_unity=-1, phase_margin=360\n"
-     ]
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 2 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 2 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%matplotlib inline\n",
-    "\n",
-    "import os\n",
-    "\n",
-    "from bag.design import Module\n",
-    "\n",
-    "\n",
-    "# noinspection PyPep8Naming\n",
-    "class demo_templates__amp_sf(Module):\n",
-    "    \"\"\"Schematic generator for a source follower.\n",
-    "    \"\"\"\n",
-    "\n",
-    "    # hard coded netlist flie path to get jupyter notebook working.\n",
-    "    yaml_file = os.path.join(os.environ['BAG_WORK_DIR'], 'BAG_XBase_demo', \n",
-    "                             'BagModules', 'demo_templates', 'netlist_info', 'amp_sf_soln.yaml') \n",
-    "\n",
-    "    def __init__(self, bag_config, parent=None, prj=None, **kwargs):\n",
-    "        Module.__init__(self, bag_config, self.yaml_file, parent=parent, prj=prj, **kwargs)\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        return dict(\n",
-    "            lch='channel length in meters.',\n",
-    "            w_dict='Dictionary of transistor widths.',\n",
-    "            intent_dict='Dictionary of transistor threshold flavors.',\n",
-    "            fg_dict='Dictionary of transistor number of fingers.',\n",
-    "            dum_info='Dummy information data structure',\n",
-    "        )\n",
-    "\n",
-    "    def design(self, lch, w_dict, intent_dict, fg_dict, dum_info):\n",
-    "        w_amp = w_dict['amp']\n",
-    "        w_bias = w_dict['bias']\n",
-    "        intent_amp = intent_dict['amp']\n",
-    "        intent_bias = intent_dict['bias']\n",
-    "        fg_amp = fg_dict['amp']\n",
-    "        fg_bias = fg_dict['bias']\n",
-    "\n",
-    "        self.instances['XAMP'].design(w=w_amp, l=lch, intent=intent_amp, nf=fg_amp)\n",
-    "        self.instances['XBIAS'].design(w=w_bias, l=lch, intent=intent_bias, nf=fg_bias)\n",
-    "\n",
-    "        # handle dummy transistors\n",
-    "        self.design_dummy_transistors(dum_info, 'XDUM', 'VDD', 'VSS')\n",
-    "\n",
-    "        \n",
-    "import os\n",
-    "\n",
-    "# import bag package\n",
-    "import bag\n",
-    "from bag.io import read_yaml\n",
-    "\n",
-    "# import BAG demo Python modules\n",
-    "import xbase_demo.core as demo_core\n",
-    "from xbase_demo.demo_layout.core import AmpSFSoln\n",
-    "\n",
-    "# load circuit specifications from file\n",
-    "spec_fname = os.path.join(os.environ['BAG_WORK_DIR'], 'specs_demo/demo.yaml')\n",
-    "top_specs = read_yaml(spec_fname)\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "\n",
-    "demo_core.run_flow(bprj, top_specs, 'amp_sf', AmpSFSoln, sch_cls=demo_templates__amp_sf, run_lvs=True)"
-   ]
-  }
- ],
- "metadata": {
-  "anaconda-cloud": {},
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.5"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/workspace_setup/tutorial_files/solutions/5_hierarchical_generators.ipynb b/workspace_setup/tutorial_files/solutions/5_hierarchical_generators.ipynb
deleted file mode 100644
index 1635373..0000000
--- a/workspace_setup/tutorial_files/solutions/5_hierarchical_generators.ipynb
+++ /dev/null
@@ -1,349 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Layout Solution\n",
-    "The following cell contains the layout solution  for the two-stage amplifier.  LVS should pass when you evaluate it."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "creating BagProject\n",
-      "computing layout\n",
-      "ext_w0 = 1, ext_wend=1, ytop=2592\n",
-      "final: ext_w0 = 1, ext_wend=1, ytop=2592\n",
-      "{'s': WireArray(TrackID(layer=3, track=7, num=9, pitch=2), 1109, 1265, 0.001), 'd': WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 1231, 1387, 0.001), 'g': WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 915, 1071, 0.001)}\n",
-      "WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 915, 1071, 0.001)\n",
-      "6.5\n",
-      "ext_w0 = 1, ext_wend=7, ytop=2880\n",
-      "ext_w0 = 2, ext_wend=9, ytop=3024\n",
-      "final: ext_w0 = 1, ext_wend=7, ytop=2880\n",
-      "creating layout\n",
-      "layout done\n",
-      "computing AMP_CHAIN schematics\n",
-      "creating AMP_CHAIN schematics\n",
-      "running lvs\n",
-      "Running tasks, Press Ctrl-C to cancel.\n",
-      "lvs passed\n",
-      "lvs log is /users/erichang/projects/bag_gen/BAG2_cds_ff_mpt/pvs_run/lvs_run_dir/DEMO_AMP_CHAIN/AMP_CHAIN/lvsLog_20180906_112850xbhqztn3\n",
-      "LVS flow done\n"
-     ]
-    }
-   ],
-   "source": [
-    "from bag.layout.routing import TrackID\n",
-    "from bag.layout.template import TemplateBase\n",
-    "\n",
-    "from xbase_demo.demo_layout.core import AmpCS, AmpSFSoln\n",
-    "\n",
-    "\n",
-    "class AmpChain(TemplateBase):\n",
-    "    def __init__(self, temp_db, lib_name, params, used_names, **kwargs):\n",
-    "        TemplateBase.__init__(self, temp_db, lib_name, params, used_names, **kwargs)\n",
-    "        self._sch_params = None\n",
-    "\n",
-    "    @property\n",
-    "    def sch_params(self):\n",
-    "        return self._sch_params\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        return dict(\n",
-    "            cs_params='common source amplifier parameters.',\n",
-    "            sf_params='source follower parameters.',\n",
-    "            show_pins='True to draw pin geometries.',\n",
-    "        )\n",
-    "\n",
-    "    def draw_layout(self):\n",
-    "        \"\"\"Draw the layout of a transistor for characterization.\n",
-    "        \"\"\"\n",
-    "\n",
-    "        cs_params = self.params['cs_params'].copy()\n",
-    "        sf_params = self.params['sf_params'].copy()\n",
-    "        show_pins = self.params['show_pins']\n",
-    "\n",
-    "        cs_params['show_pins'] = False\n",
-    "        sf_params['show_pins'] = False\n",
-    "\n",
-    "        # create layout masters for subcells we will add later\n",
-    "        cs_master = self.new_template(params=cs_params, temp_cls=AmpCS)\n",
-    "        sf_master = self.new_template(params=sf_params, temp_cls=AmpSFSoln)\n",
-    "\n",
-    "        # add subcell instances\n",
-    "        cs_inst = self.add_instance(cs_master, 'XCS')\n",
-    "        # add source follower to the right of common source\n",
-    "        x0 = cs_inst.bound_box.right_unit\n",
-    "        sf_inst = self.add_instance(sf_master, 'XSF', loc=(x0, 0), unit_mode=True)\n",
-    "\n",
-    "        # get VSS wires from AmpCS/AmpSF\n",
-    "        cs_vss_warr = cs_inst.get_all_port_pins('VSS')[0]\n",
-    "        sf_vss_warrs = sf_inst.get_all_port_pins('VSS')\n",
-    "        # only connect bottom VSS wire of source follower\n",
-    "        if len(sf_vss_warrs) < 2 or sf_vss_warrs[0].track_id.base_index < sf_vss_warrs[1].track_id.base_index:\n",
-    "            sf_vss_warr = sf_vss_warrs[0]\n",
-    "        else:\n",
-    "            sf_vss_warr = sf_vss_warrs[1]\n",
-    "\n",
-    "        # connect VSS of the two blocks together\n",
-    "        vss = self.connect_wires([cs_vss_warr, sf_vss_warr])[0]\n",
-    "\n",
-    "        # get layer IDs from VSS wire\n",
-    "        hm_layer = vss.layer_id\n",
-    "        vm_layer = hm_layer + 1\n",
-    "        top_layer = vm_layer + 1\n",
-    "\n",
-    "        # calculate template size\n",
-    "        tot_box = cs_inst.bound_box.merge(sf_inst.bound_box)\n",
-    "        self.set_size_from_bound_box(top_layer, tot_box, round_up=True)\n",
-    "\n",
-    "        # get subcell ports as WireArrays so we can connect them\n",
-    "        vmid0 = cs_inst.get_all_port_pins('vout')[0]\n",
-    "        vmid1 = sf_inst.get_all_port_pins('vin')[0]\n",
-    "        vdd0 = cs_inst.get_all_port_pins('VDD')[0]\n",
-    "        vdd1 = sf_inst.get_all_port_pins('VDD')[0]\n",
-    "\n",
-    "        # get vertical VDD TrackIDs\n",
-    "        vdd0_tid = TrackID(vm_layer, self.grid.coord_to_nearest_track(vm_layer, vdd0.middle))\n",
-    "        vdd1_tid = TrackID(vm_layer, self.grid.coord_to_nearest_track(vm_layer, vdd1.middle))\n",
-    "\n",
-    "        # connect VDD of each block to vertical M5\n",
-    "        vdd0 = self.connect_to_tracks(vdd0, vdd0_tid)\n",
-    "        vdd1 = self.connect_to_tracks(vdd1, vdd1_tid)\n",
-    "        # connect M5 VDD to top M6 horizontal track\n",
-    "        vdd_tidx = self.grid.get_num_tracks(self.size, top_layer) - 1\n",
-    "        vdd_tid = TrackID(top_layer, vdd_tidx)\n",
-    "        vdd = self.connect_to_tracks([vdd0, vdd1], vdd_tid)\n",
-    "\n",
-    "        # connect vmid using vertical track in the middle of the two templates\n",
-    "        mid_tid = TrackID(vm_layer, self.grid.coord_to_nearest_track(vm_layer, x0, unit_mode=True))\n",
-    "        vmid = self.connect_to_tracks([vmid0, vmid1], mid_tid)\n",
-    "\n",
-    "        # add pins on wires\n",
-    "        self.add_pin('vmid', vmid, show=show_pins)\n",
-    "        self.add_pin('VDD', vdd, show=show_pins)\n",
-    "        self.add_pin('VSS', vss, show=show_pins)\n",
-    "        # re-export pins on subcells.\n",
-    "        self.reexport(cs_inst.get_port('vin'), show=show_pins)\n",
-    "        self.reexport(cs_inst.get_port('vbias'), net_name='vb1', show=show_pins)\n",
-    "        self.reexport(sf_inst.get_port('vout'), show=show_pins)\n",
-    "        self.reexport(sf_inst.get_port('vbias'), net_name='vb2', show=show_pins)\n",
-    "\n",
-    "        # compute schematic parameters.\n",
-    "        self._sch_params = dict(\n",
-    "            cs_params=cs_master.sch_params,\n",
-    "            sf_params=sf_master.sch_params,\n",
-    "        )\n",
-    "\n",
-    "\n",
-    "import os\n",
-    "\n",
-    "# import bag package\n",
-    "import bag\n",
-    "from bag.io import read_yaml\n",
-    "\n",
-    "# import BAG demo Python modules\n",
-    "import xbase_demo.core as demo_core\n",
-    "\n",
-    "# load circuit specifications from file\n",
-    "spec_fname = os.path.join(os.environ['BAG_WORK_DIR'], 'specs_demo/demo.yaml')\n",
-    "top_specs = read_yaml(spec_fname)\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "\n",
-    "demo_core.run_flow(bprj, top_specs, 'amp_chain_soln', AmpChain, run_lvs=True, lvs_only=True)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## AmpChain Schematic Generator Solution\n",
-    "The AmpChain schematic generation solution is shown below, evaluate it to run through the flow.  Note that it uses the `amp_chain_soln` schematic template instead of the `amp_chain` schematic template you are supposed to fill out.  Change `amp_chain_soln` to `amp_chain` in the `yaml_file` class variable if you wish to debug your schematic template."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "using existing BagProject\n",
-      "computing layout\n",
-      "ext_w0 = 1, ext_wend=1, ytop=2592\n",
-      "final: ext_w0 = 1, ext_wend=1, ytop=2592\n",
-      "{'s': WireArray(TrackID(layer=3, track=7, num=9, pitch=2), 1109, 1265, 0.001), 'd': WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 1231, 1387, 0.001), 'g': WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 915, 1071, 0.001)}\n",
-      "WireArray(TrackID(layer=3, track=8, num=8, pitch=2), 915, 1071, 0.001)\n",
-      "6.5\n",
-      "ext_w0 = 1, ext_wend=7, ytop=2880\n",
-      "ext_w0 = 2, ext_wend=9, ytop=3024\n",
-      "final: ext_w0 = 1, ext_wend=7, ytop=2880\n",
-      "creating layout\n",
-      "layout done\n",
-      "creating AMP_CHAIN schematics\n",
-      "running lvs\n",
-      "Running tasks, Press Ctrl-C to cancel.\n",
-      "lvs passed\n",
-      "lvs log is /users/erichang/projects/bag_gen/BAG2_cds_ff_mpt/pvs_run/lvs_run_dir/DEMO_AMP_CHAIN/AMP_CHAIN/lvsLog_20180906_112931rlh5cdgf\n",
-      "computing AMP_CHAIN_tb_dc schematics\n",
-      "creating AMP_CHAIN_tb_dc schematics\n",
-      "computing AMP_CHAIN_tb_ac_tran schematics\n",
-      "creating AMP_CHAIN_tb_ac_tran schematics\n",
-      "schematic done\n",
-      "setting up AMP_CHAIN_tb_dc\n",
-      "running simulation\n",
-      "Running tasks, Press Ctrl-C to cancel.\n",
-      "simulation done, load results\n",
-      "setting up AMP_CHAIN_tb_ac_tran\n",
-      "running simulation\n",
-      "Running tasks, Press Ctrl-C to cancel.\n",
-      "simulation done, load results\n",
-      "all simulation done\n",
-      "loading simulation data for AMP_CHAIN_tb_dc\n",
-      "loading simulation data for AMP_CHAIN_tb_ac_tran\n",
-      "finish loading data\n",
-      ", gain=-0.4063\n",
-      ", f_3db=9.153e+09, f_unity=1.345e+10, phase_margin=85.89\n"
-     ]
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 2 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEaCAYAAAAPGBBTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xd4HNX1//H3R92SuyX3CrYxxjYuwhB67zU00wk9IQRCSEJNIISEH5B8E2poAWMCpobeCR0MyLgbXHDBxk22seUmWeX8/pgRXoTKrrSrVTmv55lHM3fauSt7j+6dmTsyM5xzzrmapCQ7AOecc02bJwrnnHO18kThnHOuVp4onHPO1coThXPOuVp5onDOOVcrTxSu2ZM0S9K+cTzeIkkHxut4zjV3nihcg4Rfqlsl5VYpnyrJJPVPdAxmtpOZvRue93pJjyb6nIkUfqZbJG2MmHomOy7XenmicPGwEDilckHScKBN8sJpEY4ys7YR07KqG0hKS0ZgrvXxROHiYQJwZsTyWcAjkRtIOkLSFElFkpZIur7K+jMlLZa0RtJ1kd0/YSvhSUmPSNoQdjXlR+y7SNKBkg4FrgZODv8Knxa5PmL7H7Q6JJ0Rce5rqsSVIulKSV+H65+U1Lm6D0HSl5KOjFhOk7Ra0mhJWZIeDY+xTtLnkrpF+wGHx+sfttLOlfQN8L+wfDdJH4fHnRbZDSdpgKT3ws/tTUl3VtZd0r6SllY5R+TnXmPdI2I5S9I3YT2viThOqqSrw303SJosqY+kuyT9rco5X5R0WSyfhWtcnihcPEwC2kvaUVIqcDJQtftnE0Ey6QgcAfxc0rEAkoYCdwOnAT2ADkCvKvsfDUwM938BuLNqEGb2GvAX4Inwr/Cd6wo8PPc9wBlAT6AL0Dtik18BxwL7hOu/A+6q4XCPE9GyAg4BVpvZFwTJswPQJzzHRcCWuuKrwT7AjsAhknoBLwN/BjoDVwDPSMoLt30MmAzkAjeGcUQrmrrvCewAHAD8QdKOYfnlBJ/F4UB74BxgMzAeOEVSCkDYZXkAwWfnmihPFC5eKlsVBwFfAd9GrjSzd81shplVmNl0gi+GfcLVJwAvmtmHZrYV+ANQdRCyD83sFTMrD89VZxKI0gnAS2b2vpmVANcBFRHrLwSuMbOl4frrgRNq6PZ5DDhaUna4fGpYBlBKkCAGmlm5mU02s6Ja4noubCGsk/RclXXXm9kmM9sCnA68En42FWb2JlAAHC6pL7ALcJ2ZlZjZ+8CL0X0sUdf9BjPbYmbTgGls+72cB1xrZnMsMM3M1pjZZ8B6guQAMA5418xWxhCXa2Tex+niZQLwPjCAKt1OAJJ2BW4GhgEZQCbwVLi6J7Ckclsz2yxpTZVDrIiY3wxkSUozs7IGxl313JuqnLsf8F9JkcmjHOjGj5PhfElfAkdJepGgFTQqXD2BoDUxUVJHghbXNWZWWkNcx5rZWzWsWxIx3w84UdJREWXpwDth3b4zs00R6xaHcUSjtrpXqvp7aRvO9wG+ruG44wkS3Jvhz39GGY9LEm9RuLgws8UEF7UPB56tZpPHCLqM+phZB+BfgMJ1y4no7pHUhuCv73qFUk3ZJiA7Yrl7xPxyIr44w9ZA5LmXAIeZWceIKcvMfpAkIlR2Px0DzDaz+QBmVmpmN5jZUGB34Eh+eF0nFpF1XAJMqBJfjpndHNatk6SciO37Rsz/4HMJuw3zItbHWvdIS4Dta1j3KHCMpJ0JutCqtphcE+OJwsXTucD+Vf6CrdQOWGtmxZLGEnTLVHqa4K/w3SVlADewLYnEaiXQv7IPPDQVGCcpPbwIfkKVcx8pac/w3H/ih/8v/gXcJKkfgKQ8ScfUcv6JwMHAz9nW7YSk/SQND7+Miwi6osrrWcdIjxJ8doeEF5CzwovUvcPkXQDcIClD0p5AZMtjLkHL7AhJ6cC1BC29SrHWPdIDwI2SBikwQlIXADNbCnxO0Mp6JuxCc02YJwoXN2b2tZkV1LD6F8CfJG0guAbxZMR+s4BLCL5klwMbgFVAST3CqOzOWiPpi3D+OoK/br8jSELff4GH5744LFsebhN5J9A/CVpCb4SxTwJ2renkZrYc+ISg1fBExKruBEmpCPgSeI8fX/CPmZktIWi9XA0UEvwl/1u2/d8+NYx3LfBHIroFzWw9we/lAYJutE00oO5V/J3gd/wGQZ0f5Ie3TI8HhhMkC9fEyV9c5JoaSW2BdcAgM1uY7HhaEgW3JQ80s9OTHMfeBImyv5lV1LW9Sy5vUbgmQdJRkrLD/vTbgBnAouRG5RIh7Oa6FHjAk0Tz4InCNRXHAMvCaRAwzry52+KEz1msI3he5h9JDsdFybuenHPO1cpbFM4552rlicI551ytWsST2bm5uda/f/9kh+Gcc83K5MmTV5tZXl3btYhE0b9/fwoKarp93znnXHUkLY5mO+96cs45V6sW0aKor88XreVf79Y0bplrTKrvgB1JUXewNdVHNWyjiDWV5VJEuYJ9JYU/qy6LFAXlKVKwXiL1+3KRmhJMKRJpKSIlJfiZmiLSU0VaSgrpaSlkpIr01BQy0lJIT00hMy2FrPRUstJTaZOeSnZGKm0yUsnJSCMrPQU1r1+eq4dWnSiKS8tZuaE42WG0es3pDu1oYq1pk5puRY8stnBvs23HMQtLw7LK5WAbC34aVJh9X1ZhwXYVYXl5hVFRYZSbUVEB5WFZQ6WmiLaZabTLSqNjdjod22TQITud3JwMcttmktcuk24dsujZoQ3dO2TRoU16g8/pGl+rThR7Dcpjr0F1XsdxrkWyMFmUVU7lFZSWG6XlFZSWV7C1rIKSyqm0nOKycrZsrWDz1jK2lJazsaSMTSVlbCwuo6i4jPVbSlm3eSvfrtvC6o0lbCj+8QjwHbPT6dclh/5dshnUtS07dG/PkO7t6N2pjbdMmrBWnSica80kkZYq0lITc/ySsnJWb9zKivVbWL6+mGXrtrB4zWa+WbuZgkXf8fzUba8B75Sdzqi+nRjdtyM/2b4LO/fuSFqqX0JtKjxROOcSIjMtlV4d29CrY5tq128sKWPOig18ubyIaUvWMWXJOv731SoA2mWlscf2uRw0tBsH7dSN9lneZZVMLWIIj/z8fPPbY51r/tZt3srHX6/hg3mFvDenkGXri8lITWGfHfI4YUxvDhjS1VsacSRpspnl17Wdtyicc01Gx+wMDh/eg8OH98DMmLJkHS9NW87LM5bx5uyV9OyQxWm79ePUsX3plJOR7HBbDW9ROOeavLLyCt76chUTJi3io/lryMlI5Zw9B3DentvRIdu7peor2haFJwrnXLMyd+UG/vnWPF6esZx2WWlcvN9Azt1zAOneJRWzuCUKSV2BPYCewBZgJlDQlF444onCudbny+VF3Pb6HN7+ahWDurblz8cOY9ftuiQ7rGYl2kRRYwoOXwb/OvAycBjBi0aGEryAfYakGyS1j1fAzjkXix17tOfBs3fhgTPz2by1nJPvm8RVz85gy9byZIfW4tR2Mftw4Hwz+6bqCklpwJHAQcAzCYrNOefqdODQbuw+sAv/eGse93+wgM8XreXOU0cxpLv/HRsvfo3COddifDCvkMufnMb6LaXccPROnDK2b7JDatIa3PUUHmQfSSPC+ZMk3Snp15Iy4xWoc87Fy16D8nj10r3YdUBnrnp2Bje+NDsuY1q1drVdo7gL+DPwgKRHgVMJLmSPAv6d6MAkHSppjqT5kq5M9Pmccy1DbttMHjp7F87evT8PfriQCycUsKnkx+NOuejV2PUkabaZDZWUBXwLdDWzcgUjd003s+EJC0pKBeYSXANZCnwOnGJms6vb3ruenHPVmfDJIq5/cTZDe7Rnwrlj6ZjtD+lFikfXUzGAmRUDi82sPFw2oDQuUdZsLDDfzBaY2VZgInBMgs/pnGthzvhJf+4/cwxzVm5g3H2TWLOxJNkhNUu1JYquki6X9JuI+crlRI/N3QtYErG8NCz7nqQLJBVIKigsLExwOM655mr/Id148Kx8Fq3ZxLj7JrGqyN9BE6vaEsX9QDugbcR85fIDCY6ruoHpf9BHZmb3mVm+meXn5fk7JZxzNdtrUB4P/2ws367bwin3T2Ltpq3JDqlZqfE5CjO7oTEDqWIp0CdiuTewrIZtnXOuTrtt14WHfzaWMx78lJ899Bn/OX832mb6uKjRqPFTknR7bTua2a/iH873PgcGSRpAcCF9HMFdV845V29jB3TmrlNHc+Gjk7lowmQePDufzES9uakFqa3raXI4ZQGjgXnhNBJI6DPyZlYG/BJ4HfgSeNLMZiXynM651uHAod34f8eP4MP5q7n8yWlU+HMWdaqt62k8gKSzgf3MrDRc/hfwRqIDM7NXgFcSfR7nXOtzwpjerN5Yws2vfsX2eW25/KDByQ6pSYumg64nwUXsteFy27DMOeearQv33o4FhRu5/e15bJ+XwzEje9W9UysVTaK4GZgi6Z1weR/g+oRF5JxzjUASfz52OIvWbOa3T0+nX5ccRvbpmOywmqQ63/RhZg8BuwL/DaefVHZLOedcc5aRlsK/Th9Dt/aZXPBIAas2+DMW1altrKf+lfNmtsLMng+nFeF6Seqd+BCdcy5xOudkcP+Z+RQVl3LJY1MoK28y72RrMmprUdwq6RlJZ0raSVJXSX0l7S/pRuAjYMdGitM55xJmSPf2/PWnw/l04Vpue2NussNpcmq76+lESUOB04BzCN5wt5ngdtVXgJvCcaCcc67ZO25UbwoWfce/3vuaUX07cshO3ZMdUpNR68XscLTWaxopFuecS6o/HDWUmd+u54qnpjG0R3v6dM5OdkhNQp0Xs51zrrXITEvlzlNHg8GvJk6h1K9XAJ4onHPuB/p0zuYvPx3OlG/W8c+35iU7nCbBE4VzzlVx1M49OSm/N3e9O5+Pv16d7HCSrs5EEd4Ge7qkP4TLfSWNTXxozjmXPNcfvRMDcnP49RNT+a6VD0seTYvibuAnwCnh8gbgroRF5JxzTUB2Rhq3jxvFmo1bufb5mdT02ujWIJpEsauZXcy2V6N+B/iLZ51zLd6wXh349UGDeXn6cl6Y1npfiRNNoiiVlEr4hjlJeYDfCuCcaxUu3Hs7xvTrxLXPzWTZui3JDicpokkUtxOM8dRV0k3Ah8BfEhqVc841EWmpKfz9pJ0przCueKp1vr8imkEB/wP8DvgrsBw41syeSnRgzjnXVPTrksN1Rw7l46/X8Oini5MdTqOrbVDAzpUTsAp4HHgMWBmWOedcqzFulz7sPTiPv77yFd+s2ZzscBpVXa9CLQh/FgJzCV6FWhiWOedcqyGJm386nLQUccXTrasLqsZEYWYDzGw7gvdWH2VmuWbWBTgSeLaxAnTOuaaiZ8c2XHfUUD5buJZHPlmU7HAaTTQXs3cJ318NgJm9SvCWu3qTdKKkWZIqJOVXWXeVpPmS5kg6pCHncc65eDtxTG/22yGPm1/7isVrNiU7nEYRTaJYLelaSf0l9ZN0DbCmgeedCfwUeD+yMBzWfBywE3AocHd4a65zzjUJkvjrT0eQnpLC75+Z3iq6oKJJFKcAeQS3yD4HdGXbU9r1YmZfmtmcalYdA0w0sxIzWwjMB3y4EOdck9K9QxbXHLEjkxas5fHPv0l2OAlX6/soAMxsLXBpI8QC0AuYFLG8NCz7EUkXABcA9O3bN/GROedchJN36cOL05fx11e+Yt8dutKrY5tkh5Qw0QwK+I6k/1WdotjvLUkzq5mOqW23asqqbdeZ2X1mlm9m+Xl5eXWF45xzcRXcBTWCCjOufnZGix4Lqs4WBXBFxHwWcDxQVtdOZnZgPeJZCvSJWO4NtN4BVpxzTVqfztn8/tAh/PGFWTz7xbccP6Z3skNKiGiezJ4cMX1kZpcDuyYonheAcZIyJQ0ABgGfJehczjnXYGfs1o/8fp248eXZrN5YkuxwEiKarqfOEVNueMtqg946Luk4SUsJhi9/WdLrAGY2C3gSmA28BlxsZuUNOZdzziVSSoq4+fgRbC4p5/oXZiU7nISIputpMsF1AhF0OS0Ezm3ISc3svwR3UVW37ibgpoYc3znnGtPArm25ZP+B/O3NuRwzciUHDe2W7JDiKppEsaOZFUcWSMpMUDzOOdcsXbjP9rw8YznXPjeDXbfrTPus9GSHFDfRPEfxcTVln8Q7EOeca84y0lL4f8ePoHBDCTe/+lWyw4mrGlsUkroTPMPQRtIott262h7IboTYnHOuWdm5T0fO2WMAD3y4kKN37slu23VJdkhxUVvX0yHA2QS3qP49onwDcHUCY3LOuWbr8oMH8/rsFVz17AxevXQvstKb/yhEtY0eO97M9gPONrP9IqajzcxHj3XOuWpkZ6Tx1+NGsHD1Jm5/e16yw4mL2rqeTjezR4H+ki6vut7M/l7Nbs451+rtOSiXE8b05t73F3DEiB7s1LNDskNqkNouZueEP9sC7aqZnHPO1eDaI3akU3YGv39mOmXlFckOp0FqbFGY2b3hzxsaLxznnGsZOmZn8KdjduIX//mCBz5cyEX7bJ/skOqtzucoJOUB5wP9I7c3s3MSF5ZzzjV/hw3rzsFDu/F/b87lkJ26MyA3p+6dmqBonqN4HugAvAW8HDE555yrhSRuPHYYGWkpXNmMX3IUzZPZ2Wb2+4RH4pxzLVC39llcc/iOXPnsDB7//BtO27VfskOKWTQtipckHZ7wSJxzroU6eZc+7DGwC3995SuWrduS7HBiFk2iuJQgWWyRVCRpg6SiRAfmnHMtReVLjsorjGv+2/xechTN+yjamVmKmbUxs/bhcvvGCM4551qKPp2z+e0hO/DOnEKem/ptssOJSTR3PY2upng9sNjM6nzTnXPOucBZu/fnpenLuOHF2ew5MI+8ds1jIO5oup7uBiYB94fTJGAiMFfSwQmMzTnnWpTUFHHLCTuzeWs51z03s9l0QUWTKBYBo8xsjJmNAUYCM4EDgVsSGJtzzrU4A7u25fKDBvParBW8NH15ssOJSjSJYkj4ilIAzGw2QeJYkLiwnHOu5TpvzwHs3Kcjf3h+JoUbmv57tqNJFHMk3SNpn3C6m6DbKRMoTXB8zjnX4qSlpvC3E0ewqZl0QUWTKM4G5gOXAb8GFoRlpcB+9TmppFslfSVpuqT/SuoYse4qSfMlzZF0SH2O75xzTd3Aru349YFBF9SLTbwLKprbY7eY2d/M7DgzO9bMbjOzzWZWYWYb63neN4FhZjYCmAtcBSBpKDAO2Ak4FLhbUvN/64dzzlXj/L0GMKpvR657biYri4qTHU6N6kwUkgZJelrSbEkLKqeGnNTM3oi4tXYSwVv0AI4BJppZiZktJGjJjG3IuZxzrqlKS03h7yeNpKSsnN89Pb3JdkFF0/X0EHAPUEbQ1fQIMCGOMZwDvBrO9wKWRKxbGpb9iKQLJBVIKigsLIxjOM4513gG5OZw9eE78t7cQh777Jtkh1OtaBJFGzN7G5CZLTaz64H969pJ0luSZlYzHROxzTUECeg/lUXVHKraFGtm95lZvpnl5+XlRVEN55xrmk7ftR97Dszlppe/ZPGaTckO50eiSRTFklKAeZJ+Kek4oGtdO5nZgWY2rJrpeQBJZwFHAqfZtvbWUqBPxGF6A8tiqpFzzjUzKSnilhNGkJYiLp04ldIm9ka8aBLFZUA28CtgDHAGcFZDTirpUOD3wNFmtjli1QvAOEmZkgYAg4DPGnIu55xrDnp2bMNffjqcqUvWccfb85Idzg/UOdaTmX0ezm4Efhan894JZAJvSgKYZGYXmdksSU8Cswm6pC42s/I4ndM555q0I0f05J2vCrnznfnsNTiPXfp3TnZIQHDdofoV0gu17WhmRyckonrIz8+3goKCZIfhnHMNtqG4lCNu/5DyCuPVy/aifVZ6ws4labKZ5de1XW0tip8Q3IH0OPAp1V9ods45F0ftstL5x7iRnPivT7jqmRnceeoowp6XpKntGkV34GpgGPBP4CBgtZm9Z2bvNUZwzjnXGo3u24nfHDyYl2cs59FPk3/LbI2JwszKzew1MzsL2I3g4bd3JV3SaNE551wrddHe27PP4DxufGk2s5atT2ostd71FN599FPgUeBi4Hbg2cYIzDnnWrOUFPH3k3amU3Y6v3xsChtLkveeuBoThaTxwMfAaOAGM9vFzG40s+b1Dj/nnGumurTN5I5TRrN4zSZ+9/S0pA3xUVuL4gxgMHAp8LGkonDaIKmoccJzzrnWbeyAzlx52BBembGCe99PzmuAarzrycyieRjPOedcgp2/13ZMW7qeW177ip16tmevQY07bJEnA+eca+IkccvxIxjYtS2XPD6FJWs3171THHmicM65ZiAnM417z8invMI4b3wBG4ob7wWjniicc66ZGJCbwz2njWF+4UYueXwKZY00eKAnCueca0b2HJTLjccM4905hdz40uxGOWedgwI655xrWk7dtS8LCjfywIcLGZCbw9l7DEjo+TxROOdcM3TV4TuyemMJ/brkJPxcniicc64ZSk0R/xg3qlHO5dconHPO1coThXPOuVrV+OKi5kRSIbAY6ABEDrNY23LlfC6wOk6hVD1ffberaX115dHUseq61lLnyPl41Tna+kazrde55vL6/F+G5lPnWH/HVZfjVed+Zlb3Y95m1mIm4L5olyvngYJEnb++29W0vrryaOrYWutcZT4udY62vl7nhtW5Pv+Xm1OdY/0dN0ada5taWtfTizEsV12XiPPXd7ua1ldXHksdW1udk1nfaLb1Otdc3lz+L0ezbTS/z+rKGrvONWoRXU8NIanAonhnbEvidW4dvM6tQ2PUuaW1KOrjvmQHkARe59bB69w6JLzOrb5F4ZoWSe8Cj5rZA8mOxTkX8BaFa3SSFknaImmjpJWSHpLUNtlxxZOkhyVtDetYOZ2c7Licqw9PFC5ZjjKztgSv2t0FuDbJ8STCLWbWNmJ6ouoGknx0BNfkeaJwSWXBO9hfBYZFFPeT9FH42t03JOVWrpD0lKQVktZLel/SThHrDpc0O9zvW0lXRKw7UtJUSeskfSxpRHXxSPqXpNuqlD0v6fJw/vfhsTdImiPpgFjrHLaofi9pOrBJUpqknpKekVQoaaGkX0Vs3yZsoXwX1u+3kpZGrDdJAyOWH5b052jqHsZyhaTp4Wf6hKSsiPXHhPsWSfpa0qGSTpQ0uUqdfiPpuVg/C9c8eKJwSSWpD3A4MCWi+FTgZ0BXIAO4ImLdq8CgcN0XwH8i1j0IXGhm7QgSz//Cc4wG/g1cCHQB7gVekJRZTUiPASdLUrhvJ+BgYKKkHYBfAruE5zgEWFTPqp8CHAF0BCoIbnecBvQCDgAuk3RIuO0fge3D6RDgrGhPEmXdTwIOBQYAI4Czw33HAo8Avw3j3Jugvi8AAyTtGHGM04EJ0cblmhdPFC5ZnpO0DvgQeA/4S8S6h8xsrpltAZ4ERlauMLN/m9kGMysBrgd2ltQhXF0KDJXU3sy+M7MvwvLzgXvN7FMzKzez8UAJsFs1cX0AGLBXuHwC8ImZLQPKgczwHOlmtsjMvq6ljleEf8Wvk1T1ydnbzWxJWMddgDwz+5OZbTWzBcD9wLhw25OAm8xsrZktAW6v5ZxVRVP3281smZmtJUhYlZ/3ucC/zexNM6sws2/N7Kvws3+CIDkQtur6Ay/FEJdrRjxRuGQ51sw6mlk/M/tF+IVZaUXE/GagLYCkVEk3h10gRWz7a76ya+p4gtbJYknvSfpJWN4P+E3El/Y6oA/Qs2pQFtwGOJHgL34IWjf/CdfNBy4jSFCrJE2U9KNjRLgtrGNHM8utsm5JxHw/oGeV+K4GuoXre1bZfnEt56wqmrpX+3mH29WUCMcDp4YtrzOAJ8ME4logTxSuOTkVOAY4kGCsm/5huQDM7HMzO4agW+o5gtYIBF+yN0V8aXc0s2wze7yG8zwOnCCpH7Ar8EzlCjN7zMz2JPgCNuD/1bMukfelLwEWVomvnZkdHq5fTvClXalvlWNtBrIjlrtXOXYsdY+0hKC768fBm00CthK0vE7Fu51aNE8UrjlpR9Btsobgi/H77ipJGZJOk9TBzEqBIoKuIgi6cS6StKsCOZKOkNSuupOY2RSgEHgAeN3M1oXn2EHS/mH/fjGwJeIcDfEZUBRe4G4TtpyGSdolXP8kcJWkTpJ6A5dU2X8qwV/3qZIOBfaJWBdT3at4EPiZpAMkpUjqJWlIxPpHgDuBMjP7sD4Vd82DJwrXnDxC0O3yLTAbmFRl/RnAorBb6iLCPnQzKyDoq78T+A6YT3jBthaPE7RcHosoywRuJhipcwVBy+XqetcmZGblwFEE1wYWhsd/gKDVBHADQb0XAm/w47/eLw33XwecRtCaqjx2fepeue9nBDcV/B/BSKXvEbSkKk0guGnAWxMtnD+Z7VwzI2lfgqfXeyc5jjbAKmC0mc1LZiwusbxF4Zyrr58Dn3uSaPn8qVDnXMwkLSK4ieDYJIfiGoF3PTnnnKuVdz0555yrVYvoesrNzbX+/fsnOwznnGtWJk+evNqieGd2i0gU/fv3p6CgINlhOOdcsyIpqqf8vevJOedcrVpEi6K+ikvLKSoujXk/BSNGRL99DZtHcxRV2bmmfSI3+0F8qmmbbceOPKa0bX/px+XBz22xqXJdTZV0zjV7rTpRvP3lKi5+7Iu6N3RRq0wkkkipTDri+/nK9SnS9wkmRZXL2+ZTKtelVC5vW5eaEi6nQGq4XFmWlhr+TBGpKSnBz1SRHi6npwbbpIXz6akppKemkJG2bTmYTyEzrXJKDX6mBz+z0lPJSk+hTXoqbTJSyUpLJSXFE6VruVp1ohjWqz1/PnZY3RtGiPlm4hpuP47mOFV3relWZvvBNjWV/3DfykWL2Mps2z7BvP1wW7OI/bZt8/1+Zj8qr6g8jkGFbdv2+3mz77epMKioqNzPKLdt+5WHPysqjPIKC+YNysPl8opg++LSiu/Xl5Yb5RUVlFUYZeXBNqXlwXJpeQVl5duWGyorPYWcjDTaZKSSk5FGTmYqOZlptMtKo21mGu2y0mmXlUb7rHTat0mnfVYaHbMz6JSd/v3PtFTvCXZNU6tOFP0ewVxoAAAaxklEQVS65NCvS06yw3BJZmFS2VpeQWlZBaXlFZSUBdPWsgqKy8rZGi4Xl5ZTXFpOSWkFW0rLg2lr8HPz1jI2l5SzaWsZm0rK2VBcxvL1xWwsLmNDcSmbttY+fmCHNul0zskgt20GuW0zyWuXSdd2mXRtn0W39ln06BBM7bLSG+mTcS7QqhOFcxB0cWWkiYy0lGDYvwQprzA2FJdStKWM9VtKWbdlK99tLmXd5q2s3RRMazZtZc3GEuau3MBH81dTVFz2o+O0y0qjV8c29OmcTZ9O2fTrkk3/3BwGdMmhV6c2pHo3mIszTxTONZLUFNExO4OO2RlR71NcWk7hhhJWFBWzfH0xy9dtYdm6LSz9bguL12ziw3mr2VK6raWSkZbCdrk5DOzalsHd2jGkezt27NGe3p3a+A0Hrt48UTjXhGWlpwYth87Z1a43Mwo3lrBo9WYWrd7E14Ubmb9qI9OXruflGcu/v6bUPiuN4b07MLxXR3bu3YEx/TrRtX1WI9bENWeeKJxrxiTRtV0WXdtlMXZA5x+s21RSxpyVG/hyeRGzlhUxY+l6HvxwAaXlQfbo07kNu/TrzG7bd2H37bvQu1P1yci5qBJF+FatcQSvPexJ8GavmcDLwKtmVpGwCJ1z9ZKTmcbovp0Y3bfT92UlZeXMWlbEF4u/o2DRd7w3t5Bnp3wLQL8u2ewzOI/9dujKbtt1oU1GarJCd01MnaPHSnoI6AW8BBQQvKgkCxgM7AeMAa40s/cTG2rN8vPzzYfwcC52FRXG3FUb+OTrNXwwbzUff72a4tIKstJT2GdwHocO687+Q7rRoY3fadUSSZpsZvl1bhdFohhmZjNrWZ8B9DWz+bGHGR+eKJyLj+LScj5duJa3Zq/kjdkrWFlUQkZqCvsNyeO4Ub3Yb0hXMtO8pdFSxC1R1HDwTkAfM5ten+DizROFc/FXUWFMXbqOl6Yt54Vpy1i9sYQObdL56ehenLZrXwZ2bZfsEF0DxT1RSHoXOJrgusZUoBB4z8wub0CcceGJwrnEKiuv4KOv1/BUwRJen7WC0nJjbP/OnLPnAA4a2s2f3Wimok0Usdz11MHMiiSdBzxkZn+U1CRaFM65xEpLDa5Z7DM4j9UbS3hm8lImTFrMRY9Opl+XbM7dcwAn5fchK927pVqiWAaXSZPUAziJ4MK2c64Vym2byYX7bM+7V+zL3aeNpnNOBn94fhZ73/IOD320kOLS2ocqcc1PLIniT8DrwNdm9rmk7YB5de0k6d+SVkmaGVF2vaRvJU0Np8Mj1l0lab6kOZIOiaUyzrnGk5aawuHDe/DfX+zB4+fvRv/cHG54cTb73PoOT36+hPI4DLbomoZ6XcyO6QTS3sBG4BEzGxaWXQ9sNLPbqmw7FHgcGEvwvMZbwGAzq/VPFL9G4VzymRmfLFjDra/PYco36xjSvR3XHjGUPQflJjs0V4Nor1FE3aKQNFjS25UtA0kjJF1b137h8xVrozzNMcBEMysxs4XAfIKk4Zxr4iSx+/a5PPvz3bnjlFFsLCnj9Ac/5Rf/mczKouJkh+caIJaup/uBq4BSgPDW2HENOPcvJU0Pu6YqHx3tBSyJ2GZpWPYjki6QVCCpoLCwsAFhOOfiSRJH7dyTty7fh98cNJi3vlzFAX97j/EfL/LuqGYqlkSRbWafVSn78RjI0bkH2B4YCSwH/haWV3ePXbX/sszsPjPLN7P8vLy8eobhnEuUrPRULjlgEG9ctjej+nbkjy/M4pT7J7Fk7eZkh+ZiFEuiWC1pe8IvbkknEHzJx8zMVppZeThG1P1s615aCvSJ2LQ3sKw+53DONQ39c3N45Jyx3HrCCGYvK+Kwf37AUwVLanxjo2t6YkkUFwP3AkMkfQtcBvy8PicNb7OtdBzBAIMALwDjJGVKGgAMAqq2YpxzzYwkTszvw6uX7sXQnu357dPTuXTiVDaV1LdTwjWmqB+4M7MFwIGScoAUM9sQzX6SHgf2BXIlLQX+COwraSRB62QRcGF4jlmSngRmE3RrXVzXHU/OueajT+dsJp6/G/e89zV/e2MOs5cXcc9poxnUzYcDacpiGcKjG/AXoKeZHRbeyvoTM3swkQFGw2+Pda75+Xj+an41cQqbSsr520k7c/jwHnXv5OIq7rfHAg8TPHDXM1yeS9D95JxzMdt9YC4v/2ovduzRjl/85wvu/N88v27RRMWSKHLN7EmgAsDMygDvFnLO1Vu39lk8dv5uHDuyJ7e9MZfLn5zmQ4A0QbEMCrhJUhe23fW0G7A+IVE551qNrPRU/u/kkWyf15a/vTmXFeuLue/MMbTL8pclNRWxtCguJ7graXtJHwGPAJckJCrnXKsiiUsOGMQ/Th7JZ4vWcur9n7JmY0myw3KhqBKFpBSC15/uA+xOcJfSTk3lxUXOuZbh2FG9uP/MMcxduYET7/2EZeu2JDskR5SJInww7m9mVmZms8xsppmVJjg251wrtP+Qbkw4d1cKi0oYd98kTxZNQCxdT29IOl6Sv8rKOZdQYwd0ZsJ5u/Ldpq2ccv8klq/3ZJFMsV6jeAookVQkaYOkogTF5Zxr5Ub26cgj545l7catjLvPk0UyRZ0ozKydmaWYWYaZtQ+X2ycyOOdc6zaqbyfGnzuWNRu3cvoDn7J209Zkh9QqxfI+itHVTNtLiuUWW+eci8novp148Kx8ln63hZ899BkbfXyoRhdL19PdwCSC0V7vD+cnAnMlHZyA2JxzDoBdt+vCXaeOZuayIi6cUEBJmT+U15hiSRSLgFFmNsbMxhC8S2ImcCBwSwJic8657x04tBu3HD+Cj+av4fInp1HhL0FqNLF0Gw0xs1mVC2Y2W9IoM1vgN0I55xrD8WN6s3pjCX999Sv6ds7m94cOSXZIrUIsiWKOpHsIupsATibodsokfD2qc84l2gV7b8c3azdzz7tf06dTNqfu2jfZIbV4sSSKs4FfEIwYK+BD4AqCJLFf3CNzzrlqSOKGo3fi23VbuO75mfTsmMW+O3RNdlgtWiy3x24huKB9pZkda2a3mdlmM6sws42JC9E5534oLTWFO08dzQ7d2nHJY1OYvyqq96i5eorl9tijganAa+HySEkvJCow55yrTdvMNO4/K5/M9BTOG1/Aus3+jEWixHLX0x+BscA6ADObCvRPQEzOOReVXh3bcO8ZY1i2rpiLH/uC0vKKZIfUIsWSKMrMLOb3T0j6t6RVkmZGlHWW9KakeeHPTmG5JN0uab6k6ZJGx3o+51zrMqZfZ246bhgfzV/DTS9/mexwWqRYEsVMSacCqZIGSboD+DiK/R4GDq1SdiXwtpkNAt4OlwEOAwaF0wXAPTHE55xrpU7M78N5ew7g4Y8X8fTkpckOp8WJJVFcAuwElACPA0VE8c5sM3sfWFul+BhgfDg/Hjg2ovwRC0wCOkryN6475+p05WFD2H37Llz93xnMWOov34ynWO562mxm15jZLmaWH84X1/O83cxseXjc5UDlvW29gCUR2y0Ny35E0gWSCiQVFBYW1jMM51xLkZaawh2njCKvbSYXTijwN+TFUbRvuDtL0heSNoVTgaQzExBPdY94V/ucvpndFyas/Ly8vASE4pxrbrq0zeTeM8awZtNWLn7sC8r84nZc1JkowoRwGfAboCfBX/i/Ay5tQLJYWdmlFP5cFZYvBfpEbNcbWFbPczjnWqFhvTrwl+OGM2nBWm55fU6yw2kRomlR/AI4zszeMbP1ZrbOzP4HHB+uq48XgLPC+bOA5yPKzwzvftoNWF/ZReWcc9E6fkxvztitH/e9v4CXp/tXSENFkyjam9miqoVhWZ0vLpL0OPAJsIOkpZLOBW4GDpI0DzgoXAZ4BVgAzCcYyry+icg518pdd+RQRvftyG+fnsa8lf7kdkPIrPaheiVNDocVj2ldY8rPz7eCgoJkh+Gca2JWrC/myDs+oH1WOs/9cg/aZ6UnO6QmJfwOz69ru2haFDuGD79VnWYAPsavc67J6t4hi7tOHc3itZu5wt9hUW/RjB67Y8KjcM65BNl1uy5cffiO3PjSbO5572su3m9gskNqdqJJFN9YHf1TklTXNs45lyzn7NGfqUvWcdsbcxjeqwN7D/Zb6mMRTdfTO5IukfSDt4NIypC0v6TxbLuDyTnnmhxJ/L/jhwfDkj8+hW/WbE52SM1KNIniUKAceFzSMkmzJS0A5gGnAP9nZg8nMEbnnGuw7Iw07j1jDGbGBRMK2Ly1LNkhNRt1JgozKzazu81sD6AfcAAw2sz6mdn54XDjzjnX5PXrksMdp45m7soN/Pbp6XiPeXRiGRQQMys1s+Vmti5RATnnXCLtMziP3x06hJenL+ee975OdjjNQkyJwjnnWoIL996Oo3buya2vz+HN2SuTHU6T54nCOdfqSOLWE0YwvFcHLps4hS+XFyU7pCYtpkQhqZ+kA8P5NpLaJSYs55xLrKz0VO4/M5+2WWmcN76Awg0+LHlNok4Uks4HngbuDYt6A88lIijnnGsM3dpn8cCZu7BmUwkXTiiguLQ82SE1SbG0KC4G9iB4sx1mNo9tLxxyzrlmaXjvDvzj5JFMWbKOyyZOpdyH+fiRWBJFiZltrVyQlEYNLxVyzrnm5NBhPbj2iKG8NmsFN74022+brSKaITwqvSfpaqCNpIMIhgB/MTFhOedc4zp3zwF8+90W/v3RQnp3asN5e22X7JCajFgSxZXAucAM4EKCd0c8kIignHMuGa49YkdWFG3hzy9/SYc26ZyY36funVqBqBOFmVUQvEzofkmdgd4+EKBzriVJSRH/d/JIirYU8PtnptM2M43DhvdIdlhJF8tdT+9Kah8mianAQ5L+nrjQnHOu8WWmpXLfmWMY2acjv5o4hffmFiY7pKSL5WJ2BzMrAn4KPBS+2e7AxITlnHPJk52RxkM/G8ugru244JECPpjXupNFLIkiTVIP4CTgpXicXNIiSTMkTZVUEJZ1lvSmpHnhz07xOJdzzsWiQ5t0Jpw7lgG5OZw7voB356xKdkhJE0ui+BPwOjDfzD6XtB3BUOMNtZ+ZjYx4b+uVwNtmNgh4O1x2zrlG16VtJo+fvxuDurblgkcm8/aXrXNcqKgThZk9ZWYjzOwX4fICMzs+ATEdA4wP58cDxybgHM45F5VOORk8dt5uDOnRjgsnTOa5Kd8mO6RGF/VdT5KyCG6P3QnIqiw3s3MacH4D3pBkwL1mdh/QzcyWh8deLqnap78lXQBcANC3b9/qNnHOubjokJ3Oo+ftyoWPTOayJ6ZSuKGE8/duPc9ZxNL1NAHoDhwCvEcw1tOGBp5/DzMbDRwGXCxp72h3NLP7zCzfzPLz8vz9t865xGqflc7D5+zCESN6cNMrX3LjS7NbzXAfsSSKgWZ2HbDJzMYDRwDDG3JyM1sW/lwF/BcYC6wML5oT/my9V5Ccc01KZloqd4wbxdm79+fBDxdy/iMFFBWXJjushIslUVR+GuskDQM6AP3re2JJOZXDlEvKAQ4GZgIvAGeFm50FPF/fczjnXLylpIjrj96JG48dxvtzCznuro9YULgx2WElVCyJ4r7wVtXrCL7MZwO3NODc3YAPJU0DPgNeNrPXgJuBgyTNAw4Kl51zrkk5Y7d+PHrerny3uZRj7vqIV2csT3ZICaOWMApHfn6+FRQUJDsM51wrtGTtZn752BdMW7qeM3brxzVH7EhWemqyw4qKpMkRjybUKJa7njKB4wm6m77fz8z+VJ8AnXOuJejTOZunLtqdW1//ivs/WMjni9by95NGMrRn+2SHFjexdD09T/CMQxmwKWJyzrlWLSMthWuOGMq/z85n9cYSjr7zQ/751jxKyyuSHVpcRN31JGmmmQ1LcDz14l1PzrmmYu2mrdzw4iyen7qMoT3ac9NxwxjVt2mORBRt11MsLYqPJTXodljnnGvpOudk8M9xo7j3jDGs3ljCcXd/zO+ensaajSXJDq3e6rxGIWkGwRPUacDPJC0ASgABZmYjEhuic841P4fs1J09BuZyx9vzePDDhbw2cwW/2G8gZ+/ev9lc7K5UZ9eTpH61rTezxXGNqB6868k515TNX7WBm17+knfmFNK9fRaXHTiI48f0Jj01lk6d+Iu26ymaRJEFXAQMJHgN6oNmVhaXKOPEE4Vzrjn4dMEabn7tK6Z8s47endpw4T7bc+KY3klrYcQzUTxB8FT2BwRjMi02s0vjEmWceKJwzjUXZsb/vlrFne/MZ8o36+jaLpOzdu/PKWP70jkno1FjiWeimGFmw8P5NOCzcCC/JsMThXOuuTEzPvl6Dfe89zUfzFtNRloKx47syem79WN4rw5ISngM8Xzg7vsRr8ysrDGCd865lk4Suw/MZfeBucxbuYGHPl7Es18s5cmCpQzt0Z5TxvbhqJ170jG7cVsZ1cYaRYuinG0P1gloA2xm211PSX/80FsUzrmWYP2WUl6YtoyJn33DrGVFpKeK/XboynGjerHfkK5xv5YRt66n5sAThXOupZn57Xqem/Itz09bRuGGEnIyUjlgx24cPrwH++6QF5ek4YnCOedagPIK4+OvV/PKjOW8NnMF320upU16KnsPzuXgod3Zf0hXOtXzIrgnCueca2HKyiuYtGAtb8xewRuzVrKiqJizd+/P9UfvVK/jeaJwzrkWzMyY8e162mel0z83p17HiPsw484555oOSYzo3bFRzpXc58edc841eZ4onHPO1apFXKOQVAgsBjoA6yNW1bZcOZ8LrI5TKFXPV9/talpfXXk0day6rrXUOXI+XnWOtr7RbOt1rrm8Pv+XofnUOdbfcdXleNW5n5nl1bmVmbWYCbgv2uXKeaAgUeev73Y1ra+uPJo6ttY6V5mPS52jra/XuWF1rs//5eZU51h/x41R59qmltb19GIMy1XXJeL89d2upvXVlcdSx9ZW52TWN5ptvc41lzeX/8vRbBvN77O6ssauc41aRNdTQ0gqsChuD2tJvM6tg9e5dWiMOre0FkV93JfsAJLA69w6eJ1bh4TXudW3KJxzztXOWxTOOedq5YnCOedcrTxROOecq5WP9VSFpBTgRqA9wf3J45McUsJJ2gs4jeDfw1Az2z3JISWcpL7AnQQPKs01s5uTHFLCSRoKXA+sAd42s6eTG1FiSNoOuAboYGYnhGU5wN3AVuBdM/tPEkOMuxrq/KOy+moVLQpJ/5a0StLMKuWHSpojab6kK8PiY4BeBK+AXdrYscZLLHU2sw/M7CLgJaDZJsYYf8+DgZfN7BxgaKMHGycx1vkw4A4z+zlwZqMH2wAx/nteYGbnVjnET4Gnzex84OhGCrtBGlrnGj6HemkViQJ4GDg0skBSKnAXwX+eocAp4V9cOwCfmNnlwM8bOc54epjo61zpVODxxgowAR4m+jpPAcZJ+h/wTiPHGU8PE32dJxDU+VagSyPH2VAPE/u/50i9gSXhfHmCYoy3h2lYneOmVSQKM3sfWFuleCwwP8y6W4GJBK2JpcB34TbN5R/Uj8RY58qumPVmVtS4kcZPjHX+GfBHM9sfOKJxI42fWOpsZqvM7GLgSuI31lejiPXfczWWEiQLaCbfe3Goc9w0iw8sQXqx7S8MCP4h9QKeBQ6RdAfwfjICS6Ca6gxwLvBQo0eUeDXV+TXgV5L+BSxKQlyJVG2dJfWXdB/wCHBrUiKLr5rq2SX8vY6SdFW47lngeEn30MjDX8RZ1HWu4XOol9Z8MVvVlJmZbSb40myJqq0zgJn9sZFjaSw1/Z5nAg26wNeE1VTnRcAFjRxLItVUzzXARVUKNxG0Ipu7WOr8o7L6as0tiqVAn4jl3sCyJMXSWLzOXueWpLXUM1JS6tyaE8XnwCBJAyRlAOOAF5IcU6J5nb3OLUlrqWekpNS5VSQKSY8DnwA7SFoq6VwzKwN+CbwOfAk8aWazkhlnPHmdvc60oDq3lnpGakp19kEBnXPO1apVtCicc87VnycK55xztfJE4ZxzrlaeKJxzztXKE4VzzrlaeaJwzjlXK08UrkWRVC5pasTUP9kxxZOkUZIeCOfPlnRnlfXvSsqvZf+JkgYlOk7XsrTmsZ5cy7TFzEbWtFJSWvjQUnN1NfDnBux/D/A74Pz4hONaA29RuBYv/Mv7KUkvAm+EZb+V9Lmk6ZJuiNj2mvClMG9JelzSFWH593+pS8qVtCicT5V0a8SxLgzL9w33eVrSV5L+I0nhul0kfSxpmqTPJLWT9IGkkRFxfCRpRJV6tANGmNm0KOp8dESrao6kheGqD4ADJfkfiS5q/o/FtTRtJE0N5xea2XHh/E8IvmTXSjoYGEQwtr+AFyTtDWwiGDtnFMH/jS+AyXWc71yC93jsIikT+EjSG+G6UcBOBIO2fQTsIekz4AngZDP7XFJ7YAvwAHA2cJmkwUCmmU2vcq58YGaVspMl7RmxPBDAzF4gHANI0pPAe2F5haT5wM5R1M05wBOFa3lq6np608wqXwJzcDhNCZfbEiSOdsB/w6HmkRTNYGsHAyMkVQ5Z3iE81lbgMzNbGh5rKtAfWA8sN7PPASpfFCXpKeA6Sb8FziF4u1lVPYDCKmVPmNkvKxckvRu5UtLvCD6TuyKKVwE98UThouSJwrUWmyLmBfzVzO6N3EDSZYTv56hGGdu6arOqHOsSM3u9yrH2BUoiisoJ/r+punOY2WZJbxK8rewkgtZDVVuqnLtWkg4ATgT2rrIqKzyWc1HxaxSuNXodOEdSWwBJvSR1JXij4XGS2oTXA46K2GcRMCacP6HKsX4uKT081mBJObWc+yugp6Rdwu3bRVwveAC4Hfg8ovUT6UvCrqW6SOoH3A2cZGZVk8JgoMWMsuoSz1sUrtUxszck7Qh8El5f3gicbmZfSHoCmAosJrjwW+k24ElJZwD/iyh/gKBL6YvwYnUhcGwt594q6WTgDkltCP6yPxDYaGaTJRVRwytpzewrSR0ktTOzDXVU82ygC/DfsI7LzOxwSd0IuqKW17G/c9/zYcadq4Gk6wm+wG9rpPP1BN4FhphZRQ3b/BrYYGYP1PMcvwaKzOzBegfqWh3venKuCZB0JvApcE1NSSJ0Dz+89hGrdcD4BuzvWiFvUTjnnKuVtyicc87VyhOFc865WnmicM45VytPFM4552rlicI551ytPFE455yr1f8HjzLSR2TpnesAAAAASUVORK5CYII=\n",
-      "text/plain": [
-       "<Figure size 432x288 with 2 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%matplotlib inline\n",
-    "\n",
-    "import os\n",
-    "\n",
-    "from bag.design import Module\n",
-    "\n",
-    "\n",
-    "# noinspection PyPep8Naming\n",
-    "class demo_templates__amp_chain(Module):\n",
-    "    \"\"\"Module for library demo_templates cell amp_chain.\n",
-    "\n",
-    "    Fill in high level description here.\n",
-    "    \"\"\"\n",
-    "\n",
-    "    # hard coded netlist flie path to get jupyter notebook working.\n",
-    "    yaml_file = os.path.join(os.environ['BAG_WORK_DIR'], 'BAG_XBase_demo', \n",
-    "                             'BagModules', 'demo_templates', 'netlist_info', 'amp_chain_soln.yaml') \n",
-    "\n",
-    "    def __init__(self, bag_config, parent=None, prj=None, **kwargs):\n",
-    "        Module.__init__(self, bag_config, self.yaml_file, parent=parent, prj=prj, **kwargs)\n",
-    "\n",
-    "    @classmethod\n",
-    "    def get_params_info(cls):\n",
-    "        # type: () -> Dict[str, str]\n",
-    "        \"\"\"Returns a dictionary from parameter names to descriptions.\n",
-    "\n",
-    "        Returns\n",
-    "        -------\n",
-    "        param_info : Optional[Dict[str, str]]\n",
-    "            dictionary from parameter names to descriptions.\n",
-    "        \"\"\"\n",
-    "        return dict(\n",
-    "            cs_params='common-source amplifier parameters dictionary.',\n",
-    "            sf_params='source-follwer amplifier parameters dictionary.',\n",
-    "        )\n",
-    "\n",
-    "    def design(self, cs_params=None, sf_params=None):\n",
-    "        self.instances['XCS'].design(**cs_params)\n",
-    "        self.instances['XSF'].design(**sf_params)\n",
-    "\n",
-    "\n",
-    "import os\n",
-    "\n",
-    "# import bag package\n",
-    "import bag\n",
-    "from bag.io import read_yaml\n",
-    "\n",
-    "# import BAG demo Python modules\n",
-    "import xbase_demo.core as demo_core\n",
-    "from xbase_demo.demo_layout.core import AmpChainSoln\n",
-    "\n",
-    "# load circuit specifications from file\n",
-    "spec_fname = os.path.join(os.environ['BAG_WORK_DIR'], 'specs_demo/demo.yaml')\n",
-    "top_specs = read_yaml(spec_fname)\n",
-    "\n",
-    "# obtain BagProject instance\n",
-    "local_dict = locals()\n",
-    "if 'bprj' in local_dict:\n",
-    "    print('using existing BagProject')\n",
-    "    bprj = local_dict['bprj']\n",
-    "else:\n",
-    "    print('creating BagProject')\n",
-    "    bprj = bag.BagProject()\n",
-    "\n",
-    "demo_core.run_flow(bprj, top_specs, 'amp_chain', AmpChainSoln, sch_cls=demo_templates__amp_chain, run_lvs=True)"
-   ]
-  }
- ],
- "metadata": {
-  "anaconda-cloud": {},
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.5"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}