diff --git a/pcb_calculator/CMakeLists.txt b/pcb_calculator/CMakeLists.txt
index 23188e167d..087a7916dd 100644
--- a/pcb_calculator/CMakeLists.txt
+++ b/pcb_calculator/CMakeLists.txt
@@ -19,6 +19,7 @@ set( PCB_CALCULATOR_SRCS
datafile_read_write.cpp
regulators_funct.cpp
tracks_width_versus_current.cpp
+ via.cpp
transline_ident.cpp
UnitSelector.cpp
pcb_calculator_datafile_keywords.cpp
diff --git a/pcb_calculator/bitmaps/sources/via.svg b/pcb_calculator/bitmaps/sources/via.svg
new file mode 100644
index 0000000000..4137239954
--- /dev/null
+++ b/pcb_calculator/bitmaps/sources/via.svg
@@ -0,0 +1,361 @@
+
+
+
+
diff --git a/pcb_calculator/bitmaps/via.xpm b/pcb_calculator/bitmaps/via.xpm
new file mode 100644
index 0000000000..a287ab19f3
--- /dev/null
+++ b/pcb_calculator/bitmaps/via.xpm
@@ -0,0 +1,1053 @@
+/* XPM */
+const static char *via_xpm[] = {
+"175 176 874 2",
+" c None",
+". c #FFFFFF",
+"+ c #6E6DFD",
+"@ c #0402FC",
+"# c #0806FC",
+"$ c #1513FC",
+"% c #3332FD",
+"& c #6463FD",
+"* c #BABAFE",
+"= c #4A48FD",
+"- c #6867FD",
+"; c #5D5BFD",
+"> c #4543FD",
+", c #2524FC",
+"' c #4B49FD",
+") c #EEEEFF",
+"! c #B2B2FE",
+"~ c #D0CFFE",
+"{ c #4241FD",
+"] c #F7F7FF",
+"^ c #FBFBFF",
+"/ c #4F4DFD",
+"( c #7B7AFD",
+"_ c #E5E5FF",
+": c #0705FC",
+"< c #1816FC",
+"[ c #FAFAFF",
+"} c #3F3EFD",
+"| c #C8C7FE",
+"1 c #605EFD",
+"2 c #ACACFE",
+"3 c #A8A8FE",
+"4 c #4947FD",
+"5 c #C5C4FE",
+"6 c #F3F3FF",
+"7 c #0E0CFC",
+"8 c #7271FD",
+"9 c #F2F2FF",
+"0 c #706FFD",
+"a c #2625FC",
+"b c #6260FD",
+"c c #8A89FE",
+"d c #8685FE",
+"e c #7170FD",
+"f c #5553FD",
+"g c #1311FC",
+"h c #2E2DFD",
+"i c #DEDDFF",
+"j c #7D7CFD",
+"k c #EAEAFF",
+"l c #8988FE",
+"m c #9291FE",
+"n c #3635FD",
+"o c #9190FE",
+"p c #F5F5FF",
+"q c #6E6CFD",
+"r c #9494FE",
+"s c #D5D4FE",
+"t c #B6B6FE",
+"u c #E2E2FF",
+"v c #ABABFE",
+"w c #4645FD",
+"x c #2321FC",
+"y c #1412FC",
+"z c #D3D2FE",
+"A c #CDCCFE",
+"B c #DAD9FF",
+"C c #E0E0FF",
+"D c #9C9CFE",
+"E c #0B09FC",
+"F c #2624FC",
+"G c #4C4BFD",
+"H c #B7B7FE",
+"I c #FDFDFF",
+"J c #B3B3FE",
+"K c #7E7DFD",
+"L c #CCCBFE",
+"M c #5A59FD",
+"N c #2B29FC",
+"O c #0C0AFC",
+"P c #3C3BFD",
+"Q c #2826FC",
+"R c #0E0DFC",
+"S c #2D2CFC",
+"T c #6361FD",
+"U c #D6D5FF",
+"V c #E6E6FF",
+"W c #4847FD",
+"X c #2423FC",
+"Y c #110FFC",
+"Z c #403FFC",
+"` c #BCBCFE",
+" . c #2B2AFC",
+".. c #1F1EFC",
+"+. c #5351FD",
+"@. c #EFEFFF",
+"#. c #ADADFE",
+"$. c #2A28FD",
+"%. c #2928FC",
+"&. c #7574FD",
+"*. c #1E1CFC",
+"=. c #0502FC",
+"-. c #1210FC",
+";. c #3B3AFD",
+">. c #D2D1FE",
+",. c #DBDAFF",
+"'. c #6D6BFD",
+"). c #3432FC",
+"!. c #1211FC",
+"~. c #4342FD",
+"{. c #1918FC",
+"]. c #3635FC",
+"^. c #8583FE",
+"/. c #F8F8FF",
+"(. c #FEFEFF",
+"_. c #BDBCFE",
+":. c #4F4EFD",
+"<. c #0906FC",
+"[. c #2422FC",
+"}. c #C4C3FE",
+"|. c #0F0EFC",
+"1. c #2E2DFC",
+"2. c #6765FD",
+"3. c #F6F6FF",
+"4. c #9B9BFE",
+"5. c #3532FD",
+"6. c #4D4AFD",
+"7. c #4B4AFD",
+"8. c #BCBBFE",
+"9. c #F8F8F8",
+"0. c #E4E4E4",
+"a. c #D0D0D0",
+"b. c #CCCCCC",
+"c. c #C0C0C0",
+"d. c #BBBBBB",
+"e. c #BFBFBF",
+"f. c #D9D9D9",
+"g. c #EAEAEA",
+"h. c #FCFCFC",
+"i. c #E2E2E2",
+"j. c #B5B5B5",
+"k. c #898989",
+"l. c #696969",
+"m. c #484848",
+"n. c #282828",
+"o. c #0D0D0D",
+"p. c #000000",
+"q. c #010101",
+"r. c #111111",
+"s. c #0A0A0A",
+"t. c #161616",
+"u. c #323232",
+"v. c #4E4E4E",
+"w. c #707070",
+"x. c #989898",
+"y. c #C2C2C2",
+"z. c #ECECEC",
+"A. c #F2F2F2",
+"B. c #B9B9B9",
+"C. c #7E7E7E",
+"D. c #444444",
+"E. c #0F0F0F",
+"F. c #3A3A3A",
+"G. c #5D5D5D",
+"H. c #9E9E9E",
+"I. c #B7B7B7",
+"J. c #CDCDCD",
+"K. c #FDFDFD",
+"L. c #DCDCDC",
+"M. c #CACACA",
+"N. c #B2B2B2",
+"O. c #939393",
+"P. c #777777",
+"Q. c #565656",
+"R. c #2C2C2C",
+"S. c #060606",
+"T. c #1F1F1F",
+"U. c #8C8C8C",
+"V. c #C6C6C6",
+"W. c #FBFBFB",
+"X. c #E8E8FF",
+"Y. c #FEFEFE",
+"Z. c #858585",
+"`. c #3C3C3C",
+" + c #040404",
+".+ c #0B0B0B",
+"++ c #404040",
+"@+ c #7C7C7C",
+"#+ c #B1B1B1",
+"$+ c #DFDFDF",
+"%+ c #D5D5D5",
+"&+ c #A1A1A1",
+"*+ c #6B6B6B",
+"=+ c #343434",
+"-+ c #0E0E0E",
+";+ c #949494",
+">+ c #E1E1E1",
+",+ c #C8C8C8",
+"'+ c #727272",
+")+ c #1D1D1D",
+"!+ c #020202",
+"~+ c #363636",
+"{+ c #7F7F7F",
+"]+ c #C7C7C7",
+"^+ c #F1F1F1",
+"/+ c #6E6E6E",
+"(+ c #262626",
+"_+ c #828282",
+":+ c #DADADA",
+"<+ c #7C7BFD",
+"[+ c #E5E5E5",
+"}+ c #848484",
+"|+ c #212121",
+"1+ c #030303",
+"2+ c #434343",
+"3+ c #9A9A9A",
+"4+ c #D6D6D6",
+"5+ c #868686",
+"6+ c #F0F0F0",
+"7+ c #D4D3FE",
+"8+ c #B5B5FE",
+"9+ c #BEBEBE",
+"0+ c #505050",
+"a+ c #919191",
+"b+ c #E9E9E9",
+"c+ c #D7D7D7",
+"d+ c #797979",
+"e+ c #0C0C0C",
+"f+ c #686868",
+"g+ c #D4D4D4",
+"h+ c #A8A8A8",
+"i+ c #333333",
+"j+ c #5E5E5E",
+"k+ c #C5C5C5",
+"l+ c #454545",
+"m+ c #A6A6FE",
+"n+ c #F1F1FF",
+"o+ c #A5A5A5",
+"p+ c #242424",
+"q+ c #767676",
+"r+ c #626262",
+"s+ c #050505",
+"t+ c #3B3B3B",
+"u+ c #2D2D2D",
+"v+ c #808080",
+"w+ c #E0E0E0",
+"x+ c #070707",
+"y+ c #C9C9C9",
+"z+ c #D3D3D3",
+"A+ c #090909",
+"B+ c #757575",
+"C+ c #FFF9F0",
+"D+ c #FEEED3",
+"E+ c #FEE4BB",
+"F+ c #FEDAA2",
+"G+ c #FDD38F",
+"H+ c #FDCD80",
+"I+ c #FDC66E",
+"J+ c #FDC163",
+"K+ c #FDC162",
+"L+ c #FCBC56",
+"M+ c #FCBE5B",
+"N+ c #FDC56D",
+"O+ c #FDC772",
+"P+ c #FDCC7D",
+"Q+ c #FDCF85",
+"R+ c #FDD595",
+"S+ c #FEE0B1",
+"T+ c #FEEBCC",
+"U+ c #FFF5E7",
+"V+ c #FFFEFD",
+"W+ c #5C5C5C",
+"X+ c #575757",
+"Y+ c #E3E3E3",
+"Z+ c #6D6D6D",
+"`+ c #545454",
+" @ c #FEE8C4",
+".@ c #FDD799",
+"+@ c #FCBA4F",
+"@@ c #FCB23C",
+"#@ c #FCB441",
+"$@ c #FCBE5A",
+"%@ c #FDCC7E",
+"&@ c #FEDEAC",
+"*@ c #FEF1DC",
+"=@ c #3F3F3F",
+"-@ c #8B8B8B",
+";@ c #FAFAFA",
+">@ c #1C1C1C",
+",@ c #2B2B2B",
+"'@ c #FFFDFA",
+")@ c #FEEBCD",
+"!@ c #FDBF5E",
+"~@ c #FCB23D",
+"{@ c #FCB748",
+"]@ c #FDC975",
+"^@ c #FEDBA4",
+"/@ c #FEF2DD",
+"(@ c #A3A3A3",
+"_@ c #181818",
+":@ c #EFEFEF",
+"<@ c #FEEDD1",
+"[@ c #FDD390",
+"}@ c #FCB84C",
+"|@ c #FCBF5C",
+"1@ c #FDD89D",
+"2@ c #FFF3E0",
+"3@ c #636363",
+"4@ c #2F2F2F",
+"5@ c #FFF4E3",
+"6@ c #FCB94D",
+"7@ c #FDC061",
+"8@ c #FEDBA5",
+"9@ c #1A1A1A",
+"0@ c #838383",
+"a@ c #FFFFFE",
+"b@ c #FEEAC9",
+"c@ c #FDC771",
+"d@ c #FCB544",
+"e@ c #FDD28D",
+"f@ c #EDEDED",
+"g@ c #4F4F4F",
+"h@ c #A1A1AE",
+"i@ c #4C4C4C",
+"j@ c #141414",
+"k@ c #B3B3B3",
+"l@ c #FEE5BC",
+"m@ c #FDC060",
+"n@ c #FCB33E",
+"o@ c #FDCB7B",
+"p@ c #8E8E8E",
+"q@ c #6F6F6F",
+"r@ c #292929",
+"s@ c #2E2E2E",
+"t@ c #DEDEDE",
+"u@ c #FEE8C5",
+"v@ c #FDC770",
+"w@ c #FEF1DD",
+"x@ c #191919",
+"y@ c #464646",
+"z@ c #C1C1C1",
+"A@ c #7776F8",
+"B@ c #FDCE83",
+"C@ c #FFF8EE",
+"D@ c #A1A1EA",
+"E@ c #272727",
+"F@ c #ABABAB",
+"G@ c #080808",
+"H@ c #787878",
+"I@ c #FFFAF3",
+"J@ c #FDD28C",
+"K@ c #FEDDA9",
+"L@ c #FFFDFB",
+"M@ c #F5F5F5",
+"N@ c #515151",
+"O@ c #CFCFCF",
+"P@ c #959595",
+"Q@ c #FEE7C3",
+"R@ c #FCBA50",
+"S@ c #FDBF5D",
+"T@ c #FEF1DB",
+"U@ c #656565",
+"V@ c #AAAAAA",
+"W@ c #FFFAF4",
+"X@ c #FDCD81",
+"Y@ c #7A7A7A",
+"Z@ c #8F8F8F",
+"`@ c #AEAEAE",
+" # c #FEEFD6",
+".# c #FCBD57",
+"+# c #FDC66F",
+"@# c #FFF7EA",
+"## c #BCBCBC",
+"$# c #999999",
+"%# c #AFAFAF",
+" c #FEDDA8",
+"*# c #FCB33F",
+"=# c #FCB84B",
+"-# c #ADADAD",
+";# c #A6A6A6",
+"># c #929292",
+",# c #FFF9EF",
+"'# c #FDC366",
+")# c #131313",
+"!# c #FFF5E6",
+"~# c #FFFBF4",
+"{# c #474747",
+"]# c #F3F3F3",
+"^# c #E1D6E1",
+"/# c #FCB94E",
+"(# c #B3AFF3",
+"_# c #F7B54B",
+":# c #F3B857",
+"<# c #F1B95F",
+"[# c #EEBA67",
+"}# c #EBBC6F",
+"|# c #EABC71",
+"1# c #ECBC6C",
+"2# c #EFBA64",
+"3# c #F0B95F",
+"4# c #F4B755",
+"5# c #F9B343",
+"6# c #EFB463",
+"7# c #E8E2EF",
+"8# c #101010",
+"9# c #FBB340",
+"0# c #F1B85F",
+"a# c #E4BF81",
+"b# c #DDC499",
+"c# c #D5C9AF",
+"d# c #CFCCC5",
+"e# c #CCCECC",
+"f# c #D1CBBF",
+"g# c #D7C7AC",
+"h# c #DEC396",
+"i# c #E8BD77",
+"j# c #F4B754",
+"k# c #FFF5E5",
+"l# c #F5B651",
+"m# c #E5BF7F",
+"n# c #D9C6A4",
+"o# c #CECDC6",
+"p# c #D0CCC1",
+"q# c #DBC5A0",
+"r# c #E9BD73",
+"s# c #F9B446",
+"t# c #FDC264",
+"u# c #FFFBF6",
+"v# c #171717",
+"w# c #E7E7E7",
+"x# c #FFF8ED",
+"y# c #FCBD58",
+"z# c #7B56A0",
+"A# c #E7A34C",
+"B# c #F9B445",
+"C# c #E8BD76",
+"D# c #D7C7AB",
+"E# c #CCCECB",
+"F# c #CDCDC8",
+"G# c #DAC6A1",
+"H# c #EABC70",
+"I# c #FAB341",
+"J# c #D2935D",
+"K# c #B37F74",
+"L# c #FDC875",
+"M# c #393939",
+"N# c #4A4A4A",
+"O# c #FDC368",
+"P# c #4E36C3",
+"Q# c #DF9E52",
+"R# c #F5B650",
+"S# c #DFC395",
+"T# c #CECEC8",
+"U# c #D0CCC0",
+"V# c #E4C084",
+"W# c #F8B448",
+"X# c #B17D76",
+"Y# c #7D589E",
+"Z# c #FDD089",
+"`# c #BABABA",
+" $ c #FDD088",
+".$ c #F4B752",
+"+$ c #DEC498",
+"@$ c #CDCECA",
+"#$ c #CECDC7",
+"$$ c #E0C391",
+"%$ c #FEDFAD",
+"&$ c #7D7D7D",
+"*$ c #A5757F",
+"=$ c #EEA847",
+"-$ c #F8B447",
+";$ c #DFC394",
+">$ c #CCCDCA",
+",$ c #CECCC5",
+"'$ c #FAB240",
+")$ c #CB8E62",
+"!$ c #A6767E",
+"~$ c #FCB440",
+"{$ c #FEECD0",
+"]$ c #494949",
+"^$ c #747474",
+"/$ c #FEEFD7",
+"($ c #EABD72",
+"_$ c #D2CABA",
+":$ c #EDBA6A",
+"<$ c #B6B6B6",
+"[$ c #FCBC55",
+"}$ c #D7C7A9",
+"|$ c #F4F4F4",
+"1$ c #F5AD41",
+"2$ c #EEBA68",
+"3$ c #CFCCC2",
+"4$ c #F1B85E",
+"5$ c #F6AE41",
+"6$ c #F2AB44",
+"7$ c #F7F7F7",
+"8$ c #DDDDDD",
+"9$ c #FBB23E",
+"0$ c #E2C18A",
+"a$ c #E7BE79",
+"b$ c #FFF4E4",
+"c$ c #FCBA51",
+"d$ c #F9B344",
+"e$ c #D8C6A7",
+"f$ c #E2C28C",
+"g$ c #676767",
+"h$ c #A9A9A9",
+"i$ c #FDD79A",
+"j$ c #D6C8AC",
+"k$ c #DBC69E",
+"l$ c #FAB342",
+"m$ c #FEE4B9",
+"n$ c #FFF6E9",
+"o$ c #D4C9B4",
+"p$ c #D8C7A6",
+"q$ c #EFA946",
+"r$ c #E6A34D",
+"s$ c #5F5F5F",
+"t$ c #F7B449",
+"u$ c #D3CAB8",
+"v$ c #FEEDD3",
+"w$ c #DDC498",
+"x$ c #FCB442",
+"y$ c #373737",
+"z$ c #737373",
+"A$ c #FDC265",
+"B$ c #7A55A0",
+"C$ c #FBB23D",
+"D$ c #DAC6A0",
+"E$ c #606060",
+"F$ c #4D4D4D",
+"G$ c #E1C28F",
+"H$ c #ECBB6B",
+"I$ c #FDC873",
+"J$ c #EDBB69",
+"K$ c #F4B653",
+"L$ c #F7B54C",
+"M$ c #D4C9B3",
+"N$ c #E3C189",
+"O$ c #FEDAA1",
+"P$ c #646464",
+"Q$ c #FFF7EB",
+"R$ c #E8BE77",
+"S$ c #CDCDC9",
+"T$ c #FCBB52",
+"U$ c #121212",
+"V$ c #D6C8AD",
+"W$ c #FEE9C7",
+"X$ c #FDC05F",
+"Y$ c #E1C28C",
+"Z$ c #E9BD74",
+"`$ c #585858",
+" % c #D2CBBD",
+".% c #969696",
+"+% c #252525",
+"@% c #E9BD76",
+"#% c #FEE3B7",
+"$% c #EEEEEE",
+"%% c #525252",
+"&% c #D2CBBB",
+"*% c #FBB33F",
+"=% c #FCB543",
+"-% c #FFFCF8",
+";% c #CBCBCB",
+">% c #FEDCA7",
+",% c #CFCCC4",
+"'% c #FDCA79",
+")% c #FDD492",
+"!% c #F6F6F6",
+"~% c #C3C3C3",
+"{% c #D9C6A3",
+"]% c #E4C187",
+"^% c #888888",
+"/% c #FFF2DF",
+"(% c #FFFBF5",
+"_% c #6C6C6C",
+":% c #FEE0B0",
+"<% c #F2B85A",
+"[% c #A7767E",
+"}% c #FDCE82",
+"|% c #DBC59D",
+"1% c #D0CBBF",
+"2% c #D9C7A4",
+"3% c #7B7B7B",
+"4% c #D1935D",
+"5% c #EDB257",
+"6% c #F5AF44",
+"7% c #FDC161",
+"8% c #6A6A6A",
+"9% c #CEA884",
+"0% c #AA818C",
+"a% c #FCB646",
+"b% c #8D8D8D",
+"c% c #FEEED5",
+"d% c #C7AC9E",
+"e% c #A4849C",
+"f% c #595959",
+"g% c #232323",
+"h% c #FEE4BA",
+"i% c #4F37C2",
+"j% c #C1B0AF",
+"k% c #9F88AB",
+"l% c #FEDAA0",
+"m% c #D3CBB9",
+"n% c #D1BCA4",
+"o% c #D4CAB5",
+"p% c #FEE2B5",
+"q% c #EBEBEB",
+"r% c #DBDBDB",
+"s% c #FDD18B",
+"t% c #F6B54E",
+"u% c #FEDCA6",
+"v% c #ACACAC",
+"w% c #1B1B1B",
+"x% c #7658AC",
+"y% c #BBBDD0",
+"z% c #ABAAD0",
+"A% c #B27E75",
+"B% c #B4B4B4",
+"C% c #FDCA7A",
+"D% c #4B38CC",
+"E% c #B5B7D2",
+"F% c #8F91DA",
+"G% c #7C58A0",
+"H% c #FDD698",
+"I% c #4B38CE",
+"J% c #7B59A4",
+"K% c #C4C4C4",
+"L% c #FDC46A",
+"M% c #9D7B9A",
+"N% c #C1C3CF",
+"O% c #A4A5D5",
+"P% c #A47886",
+"Q% c #FDD491",
+"R% c #D2D2D2",
+"S% c #FDC56B",
+"T% c #F0B961",
+"U% c #F3B85A",
+"V% c #FDCA78",
+"W% c #F4B651",
+"X% c #FDCE84",
+"Y% c #F7B549",
+"Z% c #D1CBBC",
+"`% c #FEDFAF",
+" & c #FDD594",
+".& c #D7C8A9",
+"+& c #909090",
+"@& c #151515",
+"#& c #DEC495",
+"$& c #FEECCF",
+"%& c #2A2A2A",
+"&& c #9D9D9D",
+"*& c #FEE3B9",
+"=& c #666666",
+"-& c #FEEDD2",
+";& c #E3C087",
+">& c #EBBC6D",
+",& c #F6B54C",
+"'& c #9C9C9C",
+")& c #878787",
+"!& c #3E3E3E",
+"~& c #FDC469",
+"{& c #BDBDBD",
+"]& c #FEE1B4",
+"^& c #EDBB68",
+"/& c #CDCECB",
+"(& c #F7B54A",
+"_& c #FFF6E7",
+":& c #FFF3E1",
+"<& c #D8C7A7",
+"[& c #E0C392",
+"}& c #A4A4A4",
+"|& c #FDCB7C",
+"1& c #F1B95C",
+"2& c #FEDFAE",
+"3& c #E6E6E6",
+"4& c #DFDEFF",
+"5& c #D3CAB7",
+"6& c #9F9F9F",
+"7& c #FFF7EC",
+"8& c #FCBB53",
+"9& c #D9C6A5",
+"0& c #FDD697",
+"a& c #222222",
+"b& c #9B9B9B",
+"c& c #E7BF7B",
+"d& c #EFB964",
+"e& c #FEF1DA",
+"f& c #CFCEFE",
+"g& c #FCFCFF",
+"h& c #F4B756",
+"i& c #FDD89C",
+"j& c #8584FE",
+"k& c #0A08FC",
+"l& c #D8C7A8",
+"m& c #E0C291",
+"n& c #100EFC",
+"o& c #FDC05E",
+"p& c #FDCF86",
+"q& c #FAB443",
+"r& c #818181",
+"s& c #F0B962",
+"t& c #CFCDC4",
+"u& c #B8B8B8",
+"v& c #F0BA61",
+"w& c #FFF6E8",
+"x& c #FFFEFC",
+"y& c #E6BE7B",
+"z& c #DEC497",
+"A& c #FDC977",
+"B& c #D8D8D8",
+"C& c #FFF4E2",
+"D& c #616161",
+"E& c #FDC874",
+"F& c #E9BD75",
+"G& c #EFBA65",
+"H& c #1715FC",
+"I& c #9796FE",
+"J& c #D7D6FF",
+"K& c #AFAFFE",
+"L& c #F5B64E",
+"M& c #FFFDF9",
+"N& c #F9F9F9",
+"O& c #2120FD",
+"P& c #302EFC",
+"Q& c #504FFD",
+"R& c #5250FD",
+"S& c #413FFD",
+"T& c #A1A1FE",
+"U& c #FEE1B3",
+"V& c #F8B549",
+"W& c #DAC5A2",
+"X& c #2927FC",
+"Y& c #1C1AFD",
+"Z& c #5453FD",
+"`& c #FCBC54",
+" * c #DCC49C",
+".* c #DFC392",
+"+* c #3A39FD",
+"@* c #1110FC",
+"#* c #C2C1FE",
+"$* c #FEF0D9",
+"%* c #1E1E1E",
+"&* c #8D8CFE",
+"** c #0704FC",
+"=* c #302FFC",
+"-* c #FEE6BF",
+";* c #EBBC6E",
+">* c #F2B85C",
+",* c #FEE5BD",
+"'* c #1816FD",
+")* c #313131",
+"!* c #3634FD",
+"~* c #F6B64E",
+"{* c #E8BE78",
+"]* c #DDC49A",
+"^* c #DFC293",
+"/* c #414141",
+"(* c #D9D8FF",
+"_* c #1614FC",
+":* c #E1E1FF",
+"<* c #B4B4FE",
+"[* c #DDDCFF",
+"}* c #B0B0FE",
+"|* c #AAA9CC",
+"1* c #A7A7A7",
+"2* c #A6A4F9",
+"3* c #DCAC83",
+"4* c #DC9C54",
+"5* c #A47480",
+"6* c #AF7C77",
+"7* c #B07D77",
+"8* c #DB9A56",
+"9* c #DC9B55",
+"0* c #AB7F84",
+"a* c #9A7A9E",
+"b* c #957DAB",
+"c* c #C3AAA2",
+"d* c #B4B1CA",
+"e* c #8686D9",
+"f* c #8586DD",
+"g* c #8F90DB",
+"h* c #D1CCBF",
+"i* c #F6B54B",
+"j* c #9E9DFE",
+"k* c #8B8AFE",
+"l* c #D1D0FE",
+"m* c #F0F0FF",
+"n* c #D8D7FF",
+"o* c #9D9CFE",
+"p* c #AEADD6",
+"q* c #9897FE",
+"r* c #9C9BFE",
+"s* c #D3D0F7",
+"t* c #D3955C",
+"u* c #896195",
+"v* c #976A8B",
+"w* c #996C89",
+"x* c #D3945C",
+"y* c #986B8A",
+"z* c #976C8D",
+"A* c #3D3D3D",
+"B* c #353535",
+"C* c #FED99F",
+"D* c #FEE5BE",
+"E* c #FEE8C6",
+"F* c #FCB647",
+"G* c #FEF2DE",
+"H* c #FFFCF7",
+"I* c #383838",
+"J* c #303030",
+"K* c #FEE6C0",
+"L* c #202020",
+"M* c #FEE2B6",
+"N* c #A0A0A0",
+"O* c #FDD79B",
+"P* c #FCBD59",
+"Q* c #FEE7C2",
+"R* c #E8E8E8",
+"S* c #CECECE",
+"T* c #FEDEAB",
+"U* c #7877FE",
+"V* c #ECECFF",
+"W* c #3231FD",
+"X* c #BBBBFE",
+"Y* c #7A79FE",
+"Z* c #A5A5FE",
+"`* c #5A58FD",
+" = c #C1C0FE",
+".= c #A4A4FE",
+"+= c #5B59FD",
+"@= c #3D3CFD",
+"#= c #A3A3FE",
+"$= c #5E5CFD",
+"%= c #0706C9",
+"&= c #0A09D5",
+"*= c #2322EE",
+"== c #C3C2FD",
+"-= c #A1A0FE",
+";= c #5F5DFD",
+">= c #C6C5FE",
+",= c #A09FFE",
+"'= c #3837FD",
+")= c #3230F9",
+"!= c #C6B8DA",
+"~= c #9D88C8",
+"{= c #322AEC",
+"]= c #322AEB",
+"^= c #6151D6",
+"/= c #302EFD",
+"(= c #1413FC",
+"_= c #EDEDFF",
+":= c #2220FC",
+"<= c #6564FC",
+"[= c #8382FE",
+"}= c #0603FC",
+"|= c #3736FD",
+"1= c #424242",
+"2= c #8A8A8A",
+"3= c #1A18FC",
+"4= c #4E4DFD",
+"5= c #6462FD",
+"6= c #2725FC",
+"7= c #F4F4FF",
+"8= c #B0B0B0",
+"9= c #1D1CFD",
+"0= c #615FFD",
+"a= c #3534FD",
+"b= c #7876FE",
+"c= c #9797FE",
+"d= c #A2A2A2",
+"e= c #AEAEFE",
+"f= c #E7E7FF",
+"g= c #BEBDFE",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ @ @ # $ % & * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ = - ; > , @ @ ' ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . ~ { @ % ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . ^ / @ ( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . _ : < [ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . . } @ | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . . 1 @ 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . . & @ 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . . 4 @ 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . 6 7 $ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . . . 8 @ 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ! . . . . 9 0 @ a 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ b c d e f g @ h i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . j k . . . . . ) l m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ @ @ @ @ # n o p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . q r 6 . . . . . s t . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . [ v w x y z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u A A A B C [ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D E F G H I . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u L M N O @ @ P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^ Q @ @ R S T U J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V W X Y @ @ @ @ @ Z ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .@ @ @ @ @ Y ..+.@.. . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #.$.7 @ @ @ @ @ @ %.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.*.@ @ @ @ @ =.-.;.>.. . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,.'.).!.@ @ @ ~.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . S @ @ @ {.].^.) . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s /.. (._.:.a <.[.@.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . }.g |.1.2.B . . [ 3.. . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . . 3.4.5.&.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7.8.(.. . . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.0.a.b.c.d.d.d.e.b.f.g.h.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i.j.k.l.m.n.o.p.p.p.p.q.r.r.s.p.p.p.p.p.t.u.v.w.x.y.z.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (.. . . . . . . . . . . . . . . . . . . . . . . . . . A.B.C.D.r.p.E.F.G.C.H.I.J.i.A.. . . . . . K.z.L.M.N.O.P.Q.R.S.p.T.Q.U.V.W.. . . . . . . . . . . . . . . . . . . . . . . . . 9 X.. . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y.J.Z.`. +.+++@+#+$+. . . . . . . . . . . . . . . . . . . . . . . . W.%+&+*+=+ +-+v.;+>+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y.,+'+)+!+~+{+]+W.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^+N./+(+p.u._+:+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <+k . . . . . . . . . . . . . . . . [+}+|+1+2+3+g.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4+5+=+p.F.x.6+. . . . . . . . . . . . . . . . 7+8+. . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . . . . . . . . . . . . 9+0+ +R.a+b+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c+d+)+e+f+g+. . . . . . . . . . . . . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . . . . . . . . . W.h+i+S.j+k+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . K.#+l+q.D.e.. . . . . . . . . . . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m+n+. . . . . . . . . K.o+p+E.q+0.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c+r+s+t+I.. . . . . . . . . . L 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #+u+-+v+^+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . w+*+x+++y+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z+2+A+B+z.. . . . . . . . . . . . . . . . . . . . . . C+D+E+F+G+H+I+J+K+L+M+J+N+O+P+Q+R+S+T+U+V+. . . . . . . . . . . . . . . . . . . . . . w+W+1+X+Y+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7+/.. . . . 6+Z+ +`+$+. . . . . . . . . . . . . . . . . . . C+ @.@O++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@$@%@&@*@V+. . . . . . . . . . . . . . . . . . . a.=@e+-@;@. . . . [ 3.. . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . . . j.>@,@9+. . . . . . . . . . . . . . . . . '@)@R+!@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@{@]@^@/@. . . . . . . . . . . . . . . . . Y.(@_@u+J.. . . J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u . :@G.s+@+9.. . . . . . . . . . . . . . . V+<@[@}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|@1@2@. . . . . . . . . . . . . . . . 6+3@s+{+;@. J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / u k+T.4@a.. . . . . . . . . . . . . . . 5@R+6@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7@8@C+. . . . . . . . . . . . . . . j.9@=+L.J K . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . K.0@s+/+9.. . . . . . . . . . . . . a@b@c@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@d@e@5@. . . . . . . . . . . . . . f@g@E.h@X.. . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^+i@j@k@. . . . . . . . . . . . . V+l@m@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@n@o@D+. . . . . . . . . . . . . Y.p@S.q@W.. . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f.r@s@t@. . . . . . . . . . . . . u@m@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v@w@. . . . . . . . . . . . . ]+x@y@:@. . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z@r.`+A@k . . . . . . . . . . . 2@O+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@n@B@C@. . . . . . . . . . . 7+D@i+E@L.. . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . F@G@H@Y./ u . . . . . . . . . I@J@n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@{@K@L@. . . . . . . . . J K M@N@_@O@. . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P@s+O.. . / u . . . . . . . . Q@R@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@T@. . . . . . . . J K . h.U@E.e.. . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a+S.V@. . . m+n+. . . . . . W@X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@K@a@. . . . . . L 3 . . Y.Y@A+d.. . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Z@S.`@. . . . . . . . . . . #.#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+#@#. . . . . . . . . . . {+A+##. . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $#S.%#. . . . . . . . . . . *#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=# @. . . . . . . . . . . C.s.y.. . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -#s+;#. . . . . . 7+/.. . '@Q+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@1@a@. . [ 3.. . . . . . q+r.z+. . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c.G@>#. . . . . . . / u . ,#'#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@X@'@. J K . . . . . . Y.G.>@Y+. . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . L.)#d+. . . . . . . . / u !#$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N+~#J K . . . . . . . ;@{#s@]#. . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.R.0+K.. . . . . . . . / ^#/#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J+(#K . . . . . . . . A.R.0+Y.. . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y.v.s@]#. . . . . . . . . T@=#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@_#:#<#[#}#|#1#2#3#4#5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@6#7#. . . . . . . . . :+r._+. . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -@8#t@. . . . . . . . . *@=#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9#0#a#b#c#d#e#e#e#e#e#e#e#e#e#e#e#f#g#h#i#j#~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@m@C+. . . . . . . . . I. +d.. . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y+S.-#. . . . . . . . . k#+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@l#m#n#o#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#p#q#r#s#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@t#u#. . . . . . . . . d+v#w#. . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^+T./+. . . . . . . . . x#y#@@z#A#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B#C#D#E#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#F#G#H#I#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J#K#@@L#L@. . . . . . . . W.M#N#Y.. . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3@,@9.. . . . . . . . '@O#@@@@P#Q#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@R#S#T#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#U#V#W#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@X#Y#@@@@Z#. . . . . . . . . $+E.x.. . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . `#s+M.. . . . . . . . . $@@@@@@P#Q#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.$+$@$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e##$$$_#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@X#Y#@@@@@@%$. . . . . . . . . $#-+>+. . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#)+&$. . . . . . . . . &@@@@@@@@@*$=$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-$;$>$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#,$a#'$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)$!$@@@@@@~${$. . . . . . . . Y.2+]$. . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^$(+9.. . . . . . . . /$#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@($p#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#_$:$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/#x#. . . . . . . . t@s.h+. . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g+s+<$. . . . . . . . W@[$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@l#}$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#h#5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]@a@. . . . . . . . _+>@|$. . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D.`+. . . . . . . . . Q+@@@@@@@@@@@@J#1$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2$3$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#_$4$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5$6$@@@@@@@@@@@@%$. . . . . . . . 7$|+&$. . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.S.8$. . . . . . . . u@@@@@@@@@@@@@@@P#Q#@@@@@@@@@@@@@@@@@@@@@@@@@@@@9$0$E#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#@$a$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@X#Y#@@@@@@@@@@@@d@b$. . . . . . . . `@A+Y+. . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y.u.q@. . . . . . . . u#c$@@@@@@@@@@@@@@P#Q#@@@@@@@@@@@@@@@@@@@@@@@@@@d$e$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#f$n@@@@@@@@@@@@@@@@@@@@@@@@@@@X#Y#@@@@@@@@@@@@@@v@a@. . . . . . . . M#g$. . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h$o.g.. . . . . . . . i$@@@@@@@@@@@@@@@@P#Q#@@@@@@@@@@@@@@@@@@@@@@@@s#j$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#k$l$@@@@@@@@@@@@@@@@@@@@@@@@X#Y#@@@@@@@@@@@@@@@@m$. . . . . . . . 9+s+8$. . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y.4@P.. . . . . . . . n$d@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@_#o$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#p$'$@@@@@@@@@@@@@@@@@@@@@@q$r$@@@@@@@@@@@@@@@@/#~#. . . . . . . . 2+s$. . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N.s.b+. . . . . . . . %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@t$u$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#q#9$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@. . . . . . . . z@s+i.. . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . F.q@. . . . . . . . v$~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@I#j$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#w$n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@x$@#. . . . . . . . y$z$. . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b.1+t@. . . . . . . . A$@@@@@@@@@@@@@@@@@@@@B$A#@@@@@@@@@@@@@@@@C$D$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#f$@@@@@@@@@@@@@@@@@@J#K#@@@@@@@@@@@@@@@@@@@@J@. . . . . . . . F@-+6+. . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . E$F$. . . . . . . . T+@@@@@@@@@@@@@@@@@@@@@@P#Q#@@@@@@@@@@@@@@@@G$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#E#H$@@@@@@@@@@@@@@@@X#Y#@@@@@@@@@@@@@@@@@@@@#@U+. . . . . . . h.|+a+. . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z.G@B.. . . . . . . . I$@@@@@@@@@@@@@@@@@@@@@@P#Q#@@@@@@@@@@@@@@J$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#,$K$@@@@@@@@@@@@@@X#Y#@@@@@@@@@@@@@@@@@@@@@@G+. . . . . . . . }+u+. . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O.T.Y.. . . . . . . /@~@@@@@@@@@@@@@@@@@@@@@@@*$=$@@@@@@@@@@@@L$p#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#M$l$@@@@@@@@@@@@)$!$@@@@@@@@@@@@@@@@@@@@@@d@C+. . . . . . . w#s+]+. . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~+&$. . . . . . . . Q+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@n@p$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#N$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O$. . . . . . . . g@P$. . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c+q.:+. . . . . . . Q$#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@R$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#S$4#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T$V+. . . . . . . V@U$;@. . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . _+~+. . . . . . . . F+@@@@@@@@@@@@@@@@@@@@@@@@@@J#1$@@@@@@@@s#p#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#V$n@@@@@@@@@5$6$@@@@@@@@@@@@@@@@@@@@@@@@@@W$. . . . . . . M@.+j.. . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u.5+. . . . . . . . X$@@@@@@@@@@@@@@@@@@@@@@@@@@P#Q#@@@@@@@@Y$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#Z$@@@@@@@@X#Y#@@@@@@@@@@@@@@@@@@@@@@@@@@o@. . . . . . . . `$j+. . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . >+q.%+. . . . . . . 2@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#Q#@@@@@@.$S$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e# %9#@@@@@@X#Y#@@@@@@@@@@@@@@@@@@@@@@@@@@#@W@. . . . . . . V@j@h.. . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .%+%. . . . . . . . 1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#Q#@@@@@@w$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#@%@@@@@@X#Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@#%. . . . . . . $% +,+. . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . %%*+. . . . . . . . M+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L$F#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#&%*%@@@@q$r$@@@@@@@@@@@@@@@@@@@@@@@@@@@@]@. . . . . . . . t+v+. . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h.r.`@. . . . . . . w@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#($@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=%-%. . . . . . . 0@F.. . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ;%1+$%. . . . . . . >%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5#,%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#V$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b@. . . . . . . c.x+7$. ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . >#s@. . . . . . . . '%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B$A#@@($e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#K$@@J#K#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)%. . . . . . . !%S.~%. ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . G.3@. . . . . . . a@}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#Q#@@{%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#]%@@X#Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J+. . . . . . . . y$^%. ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . E@3+. . . . . . . /%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#Q#s#F#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#&%n@X#Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*#(%. . . . . . . _%X+. ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M@!+b.. . . . . . . :%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!$=$Z$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#<%)$[%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)@. . . . . . . 3+r@. ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b.!+|$. . . . . . . }%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#m#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>%. . . . . . . ]+1+!%",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (@|+. . . . . . . . K+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@1%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#2%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Q+. . . . . . . ]#q.a.",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3%N#. . . . . . . . {@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4%5%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#o#6%6$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7%. . . . . . . . v#`@",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . W+8%. . . . . . . C+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#9%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#0%Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a%. . . . . . . . y$b%",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++5+. . . . . . . c%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P#d%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e%Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C+. . . . . . . f%_%",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g%(@. . . . . . . h%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@i%j%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#k%Y#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #. . . . . . . z$`+",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o.`#. . . . . . . l%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@m%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#n%r$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@u@. . . . . . . 5+++",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . W.q.;%. . . . . . . )%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*%@$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#o%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@p%. . . . . . . 3+R.",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . q%p.r%. . . . . . . s%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@t%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#1%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@u%. . . . . . . v%w%",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . L.p.b+. . . . . . . }%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@x%y%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#z%A%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1@. . . . . . . B%)#",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . c+p.:@. . . . . . . C%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@D%E%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#F%G%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H%. . . . . . . d..+",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . z+p.]#. . . . . . . O+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@I%E%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#F%J%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)%. . . . . . . K%1+",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . O@p.7$. . . . . . . L%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@M%N%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#O%P%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Q%. . . . . . . ~% +",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . R%p.M@. . . . . . . S%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#l$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@R+. . . . . . . 9+A+",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . f.p.f@. . . . . . . O+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@U%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#E#~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@. . . . . . . B.-+",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . >+p.0.. . . . . . . V%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@W%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#o#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O$. . . . . . . #+t.",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . z.p.:+. . . . . . . X%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Y%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#Z%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`%. . . . . . . &++%",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . K.1+V.. . . . . . . &@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C$T#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E+. . . . . . . +&y$",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @+. . . . . . . ^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e##&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$&. . . . . . . v+{#",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . %&&&. . . . . . . *&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#a#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#. . . . . . . =&E$",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . l+v+. . . . . . . -&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#1#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=%a@. . . . . . . {#{+",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . =&E$. . . . . . . Q$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#,&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!@. . . . . . . . %&'&",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )&!&. . . . . . . a@{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Y%E#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#_$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@V%. . . . . . . K.s.##",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V@9@. . . . . . . . ~&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#w$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ &. . . . . . . t@p.[+",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4+p.g.. . . . . . . J@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#C#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*&. . . . . . . k@8#. ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h.G@{&. . . . . . . ]&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#/&(&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@_&. . . . . . . k.F.. ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i+Z@. . . . . . . :&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9#p#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#<&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@c$. . . . . . . . `+Z+. ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f+X+. . . . . . . a@}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H+. . . . . . . . >@}&. ",
+". . . . . . . . . . . . . . . . . . . n+I . . . . . . . . . . (@>@. . . . . . . . |&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#S$-$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2&. . . . . . . 3&p.f.. ",
+". . . . . . . . . . . . . . . . . . . +.4&. . . . . . . . . . $+p.w+. . . . . . . ]&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@5&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#w$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@w@. . . . . . . h+t.Y.. ",
+". . . . . . . . . . . . . . . . . . . +.4&. . . . . . . . . . . )+6&. . . . . . . 7&~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@R$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#:#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8&a@. . . . . . . U@X+. . ",
+". . . . . . . . . . . . . . . . . . . +.4&. . . . . . . . . . . P$X+. . . . . . . . A$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9#Z%e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#9&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0&. . . . . . . . a&b&. . ",
+". . . . . . . . . . . . . . . . . . . +.4&. . . . . . . . . . . -#r.W.. . . . . . . >%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@c&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@e&. . . . . . . :+p.t@. . ",
+"f&f&f&f&f&f&f&f&f&f&f&f&. . . . . . . +.4&. . . . . . . . . . . ^+s+y.. . . . . . . n$~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@I#f#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#p$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$@. . . . . . . . k.4@. . . ",
+"@ @ @ @ @ @ @ @ @ @ @ @ g&. . . . . . +.4&. . . . . . . . . . . . m./+. . . . . . . . N+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Z$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#/&h&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@i&. . . . . . . . y$v+. . . ",
+"j&j&j&j&j&O k&j&j&j&j&j&(.. . . . . . +.4&. . . . . . . . . . . . H.9@K.. . . . . . . h%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@l&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#m&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@2@. . . . . . . Y+!+a.. . . ",
+". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . $%S.z@. . . . . . . '@}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@j#S$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#U#W#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O+. . . . . . . . )&,@. . . . ",
+". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . 0+r+. . . . . . . . H%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#^&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b@. . . . . . . . %&k.. . . . ",
+". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . B%.+6+. . . . . . . x#x$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*%D#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#[&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o&a@. . . . . . . M.1+0.. . . . ",
+". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . h.)+.%. . . . . . . . p&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,&p#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#5&q&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#%. . . . . . . . E$i@. . . . . ",
+". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . r&u+Y.. . . . . . . 5@*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@s&/&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#t&4#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@c$'@. . . . . . . q%G@u&. . . . . ",
+". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . b+G@I.. . . . . . . . $@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@m#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#F#v&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&@. . . . . . . . 5+E@Y.. . . . . ",
+". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . . g$2+. . . . . . . . w@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#E#|#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|@x&. . . . . . . 7$x@.%. . . . . . ",
+". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . . f.1+;%. . . . . . . . H%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@$$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#E#y&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b@. . . . . . . . P@x@7$. . . . . . ",
+". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . . . X+]$. . . . . . . . u#c$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@n@z&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#>$@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A&. . . . . . . . ;@T.-@. . . . . . . ",
+". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . . . B& +~%. . . . . . . . m$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@V#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#/&($@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@C&. . . . . . . . P@@&]#. . . . . . . ",
+". . . . . g n&. . . . . . . . . . . . +.4&. . . . . . . . . . . . . . . . . D&=@. . . . . . . . . E&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F&@$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#3$G&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H%. . . . . . . . ]#v#>#. . . . . . . . ",
+". . . . . H&y . . . . . . . . p I&I . +.4&. J&K&. . . . . . . . . . . . . . w+G@`@. . . . . . . . @#{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2#U#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#c#L&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!@M&. . . . . . . . {+g%N&. . . . . . . . ",
+". . . . . . . . . . . . . . . (.O&P&Q&Q R&S&y T&. . . . . . . . . . . . . . . @+a&7$. . . . . . . . U&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@V&W&e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#+$I#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=%/%. . . . . . . . w+s.V@. . . . . . . . . ",
+". . . . . . . . . . . . . . . . '.@ @ @ @ @ X&/.. . . . . . . . . . . . . . . !%T.}+. . . . . . . . . H+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@c&T#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e# %J$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2&. . . . . . . . . 0+D.. . . . . . . . . . ",
+". . . . . . . . . . . . . . . . C Y&@ @ @ @ Z&. . . . . . . . . . . . . . . . . h+s.r%. . . . . . . . I@`&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@l# *e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#>$.*5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]@a@. . . . . . . . j.S.B&. . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . +*@ @ @ @*#*. . . . . . . . . . . . . . . . . . F$=@Y.. . . . . . . . $*=%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@s&M$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#p$:#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@c$x#. . . . . . . . 6+%*3%. . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . &***@ @ =*(.. . . . . . . . . . . . . . . . . . 3&r.P@. . . . . . . . . -*~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C$;*c#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#E#W&>*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=% #. . . . . . . . . D&%&7$. . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . n+[.@ @ q . . . . . . . . . . . . . . . . . . . . &&e+B&. . . . . . . . . .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v&W&>$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#o#+$:#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@,*. . . . . . . . . B%s+J.. . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . w @ '*i . . . . . . . . . . . . . . . . . . . . . `+)*9.. . . . . . . . a@p&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-$@%D#E#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#>$D#@%5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>%. . . . . . . . . [+@&_+. . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . K&: !*. . . . . . . . . . . . . . . . . . . . . . $%T.q@. . . . . . . . . L@I$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~*{*]* %e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#5&^*>&Y%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H%. . . . . . . . . h.=@/*h.. . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . 8+m+m+(*_*d :*m+m+K&. . . <*m+m+[*. . C m+m+}*. . . <*m+m+|*S.1*C m+m+}*. . . J m+2*3*@@@@4*5*5*6*@@@@@@7*5*5*8*@@@@9*5*5*6*@@@@@@7*5*5*9*@@@@9*5*5*7*@@@@@@0*a*b*c*e$5&d*e*f*g*e#o#h*5&l&[&y&G&i*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G+a@. . . . . . . . . Y@t.3&. . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . j*k*k*l*l m*n*k*k*I&. . . o*k*k*l*. . J&k*k*I&. . . o*k*k*>.;+s.p*k*k*q*. . . r*k*k*s*I+@@t*u*u*v*@@@@@@w*u*u*4%@@@@x*u*u*y*@@@@@@w*u*u*J#@@@@J#u*u*y*@@@@@@y*u*u*x*@@@@4%u*u*z*n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Q%a@. . . . . . . . . 1*s+##. . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P$T.b+. . . . . . . . . -%A&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H%. . . . . . . . . . ;%A+P@. . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N&A*B*]#. . . . . . . . . V+ $@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@u%. . . . . . . . . . $+9@8%. . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6+s@2+N&. . . . . . . . . a@C*~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@d@D*. . . . . . . . . . q%E@i@W.. . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . >+w%W+K.. . . . . . . . . . E*F*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T$/$. . . . . . . . . . A.=+`.!%. . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g+t.s$K.. . . . . . . . . . G*|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O+C+. . . . . . . . . . ^+F.4@:@. . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z+@&r+K.. . . . . . . . . . H*Q+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~$u%a@. . . . . . . . . . 6+I*J*q%. . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . R%t.X+N&. . . . . . . . . . . K*6@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!@/$. . . . . . . . . . . g.=+u.z.. . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f.L*D.]#. . . . . . . . . . . ,#X@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~$i&'@. . . . . . . . . . . 8$+%`.$%. . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [+R.u.Y+. . . . . . . . . . . . #O#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@I+w@. . . . . . . . . . . . ;%_@0+!%. . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :@l+x@y+. . . . . . . . . . . . V+M*+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.#K*. . . . . . . . . . . . . }&A+8%h.. . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . W.Z+G@N*. . . . . . . . . . . . . u#O*{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T$S+L@. . . . . . . . . . . . W.z$S.$#. . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b&A+E$|$. . . . . . . . . . . . . (%K@`&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P*S+'@. . . . . . . . . . . . . i.A*x@K%. . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a.E@%&a.. . . . . . . . . . . . . . x&l@t#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@n@v@Q*V+. . . . . . . . . . . . . . `@U${#R*. . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#E$S.0@W.. . . . . . . . . . . . . . . /$ &T$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8&.@k#. . . . . . . . . . . . . . . $%s$s+k.Y.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N._@=+S*. . . . . . . . . . . . . . . . a@-&G+/#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[$[@v$a@. . . . . . . . . . . . . . . . %#x@J*S*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z.G. +Z+6+. . . . . . . . . . . . . . . . . V+e&T*P++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}@V%K@:&. . . . . . . . . . . . . . . . . . L.v.x+0@;@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . U*V*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z@R._@x.W.. . . . . . . . . . . . . . . . . . . . 5@M*R+o@X$d@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~$L+E&0&h%2@. . . . . . . . . . . . . . . . . . . . ]#Y@G@m.f.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . } W*W*X*$ Y*Z*W*W*`*. . . } W*W* =. . .=W*W*+=. . . @=W*W*#*. . #=W*W*; . . . P W*W*}.. . T&W*W*$=. ;@+&%=&=*===. . -=W*W*;=. . . +*W*W*>=. . ,=W*W*1 . . . '=W*)=!=K*U&~={=]=^=i$^@8@]&Q@-&U+x&. . . . . . . . . . . . . . . . . . . . . . . 7$Z@t.g%#+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . .=: /=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6+d+s.J*V@K.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . !%;+>@9@P@N&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . ~.@ (=J&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . R*q+o.n.x.|$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . q%v+@&x@b%!%. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . _=:=@ @ <=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f@_+x@8#'+B&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~%G.A+r@&&9.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . [=}=@ @ 1.I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ;@1*t+p.y$P@z.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . t@)&r@s+%%I.Y.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . |=@ @ @ |.* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f.@+T. +1=O.i.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g+2=~+p.4@k.w#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . B 3=@ @ @ @ 4=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . K.V.q++%p.r@*+`@b+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . >+o+=&)+q.J*v+c+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . 5=@ @ @ @ @ 6=7=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B&;+N@r.p.L*`$2=B%t@K.. . . . . . . . . . . . . . . . . . . h.t@8=_+`+>@p.9@X+H.3&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . I 9=|=0=a=b=4=< c=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . K.4+N*8%M#8#p.A+r@l+r+Y@2=3+V@V@B.d.d.F@V@&&-@B+r+y@p+S.p.U$/*/+d=t@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . 3.e=. . `*n*. f=g=. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [+{&6&v+3@F$A*R.a&)#r.r.r.t.a&r@`.0+P$v+&+y.[+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . . . . `*n*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp
index c92d128339..6210eb7fe4 100644
--- a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp
+++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version v3.8.0)
+// C++ code generated with wxFormBuilder (version Aug 8 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@@ -18,6 +18,7 @@
#include "../bitmaps/microstrip_zodd_zeven.xpm"
#include "../bitmaps/regul.xpm"
#include "../bitmaps/regul_3pins.xpm"
+#include "../bitmaps/via.xpm"
///////////////////////////////////////////////////////////////////////////
@@ -519,6 +520,333 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow
m_panelTrackWidth->Layout();
bSizerTrackWidth->Fit( m_panelTrackWidth );
m_Notebook->AddPage( m_panelTrackWidth, _("Track Width"), false );
+ m_panelViaSize = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizerViaSize;
+ bSizerViaSize = new wxBoxSizer( wxHORIZONTAL );
+
+ wxStaticBoxSizer* sbSizerVS_Inputs;
+ sbSizerVS_Inputs = new wxStaticBoxSizer( new wxStaticBox( m_panelViaSize, wxID_ANY, _("Parameters:") ), wxVERTICAL );
+
+ wxFlexGridSizer* fgSizerVS_Inputs;
+ fgSizerVS_Inputs = new wxFlexGridSizer( 0, 3, 0, 0 );
+ fgSizerVS_Inputs->AddGrowableCol( 1 );
+ fgSizerVS_Inputs->SetFlexibleDirection( wxBOTH );
+ fgSizerVS_Inputs->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_staticTextHoleDia = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("D:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextHoleDia->Wrap( -1 );
+ m_staticTextHoleDia->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
+ m_staticTextHoleDia->SetToolTip( _("Finished hole dia") );
+
+ fgSizerVS_Inputs->Add( m_staticTextHoleDia, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 );
+
+ m_textCtrlHoleDia = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlHoleDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ wxArrayString m_choiceHoleDiaChoices;
+ m_choiceHoleDia = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHoleDiaChoices, 0 );
+ m_choiceHoleDia->SetSelection( 0 );
+ fgSizerVS_Inputs->Add( m_choiceHoleDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextPlatingThickness = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("T:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextPlatingThickness->Wrap( -1 );
+ m_staticTextPlatingThickness->SetToolTip( _("Plating thickness") );
+
+ fgSizerVS_Inputs->Add( m_staticTextPlatingThickness, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 );
+
+ m_textCtrlPlatingThickness = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlPlatingThickness, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ wxArrayString m_choicePlatingThicknessChoices;
+ m_choicePlatingThickness = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePlatingThicknessChoices, 0 );
+ m_choicePlatingThickness->SetSelection( 0 );
+ fgSizerVS_Inputs->Add( m_choicePlatingThickness, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_staticTextViaLength = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Via length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextViaLength->Wrap( -1 );
+ fgSizerVS_Inputs->Add( m_staticTextViaLength, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 );
+
+ m_textCtrlViaLength = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlViaLength, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ wxArrayString m_choiceViaLengthChoices;
+ m_choiceViaLength = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceViaLengthChoices, 0 );
+ m_choiceViaLength->SetSelection( 0 );
+ fgSizerVS_Inputs->Add( m_choiceViaLength, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextViaPadDia = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Via pad dia:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextViaPadDia->Wrap( -1 );
+ m_staticTextViaPadDia->SetToolTip( _("Diameter of pad surrounding via") );
+
+ fgSizerVS_Inputs->Add( m_staticTextViaPadDia, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 );
+
+ m_textCtrlViaPadDia = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlViaPadDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ wxArrayString m_choiceViaPadDiaChoices;
+ m_choiceViaPadDia = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceViaPadDiaChoices, 0 );
+ m_choiceViaPadDia->SetSelection( 0 );
+ fgSizerVS_Inputs->Add( m_choiceViaPadDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextClearanceDia = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Clearance hole dia:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextClearanceDia->Wrap( -1 );
+ m_staticTextClearanceDia->SetToolTip( _("Diameter of clearance hole in ground plane(s)") );
+
+ fgSizerVS_Inputs->Add( m_staticTextClearanceDia, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 );
+
+ m_textCtrlClearanceDia = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlClearanceDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ wxArrayString m_choiceClearanceDiaChoices;
+ m_choiceClearanceDia = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceClearanceDiaChoices, 0 );
+ m_choiceClearanceDia->SetSelection( 0 );
+ fgSizerVS_Inputs->Add( m_choiceClearanceDia, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextBoardThickness = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("PCB thickness:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextBoardThickness->Wrap( -1 );
+ fgSizerVS_Inputs->Add( m_staticTextBoardThickness, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 );
+
+ m_textCtrlBoardThickness = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlBoardThickness, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ wxArrayString m_choiceBoardThicknessChoices;
+ m_choiceBoardThickness = new UNIT_SELECTOR_LEN( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceBoardThicknessChoices, 0 );
+ m_choiceBoardThickness->SetSelection( 0 );
+ fgSizerVS_Inputs->Add( m_choiceBoardThickness, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextImpedance = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Z0:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextImpedance->Wrap( -1 );
+ m_staticTextImpedance->SetToolTip( _("Characteristic impedance of conductor") );
+
+ fgSizerVS_Inputs->Add( m_staticTextImpedance, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 );
+
+ m_textCtrlImpedance = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlImpedance, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ wxArrayString m_choiceImpedanceChoices;
+ m_choiceImpedance = new UNIT_SELECTOR_RESISTOR( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceImpedanceChoices, 0 );
+ m_choiceImpedance->SetSelection( 0 );
+ fgSizerVS_Inputs->Add( m_choiceImpedance, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticAppliedCurrent = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Applied current:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticAppliedCurrent->Wrap( -1 );
+ fgSizerVS_Inputs->Add( m_staticAppliedCurrent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 );
+
+ m_textCtrlAppliedCurrent = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlAppliedCurrent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextAppliedCurrentUnits = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("A"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextAppliedCurrentUnits->Wrap( -1 );
+ fgSizerVS_Inputs->Add( m_staticTextAppliedCurrentUnits, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_staticTextResistivity = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Plating resistivity:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextResistivity->Wrap( -1 );
+ m_staticTextResistivity->SetToolTip( _("Specific resistance in ohms * meters") );
+
+ fgSizerVS_Inputs->Add( m_staticTextResistivity, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_textCtrlPlatingResistivity = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlPlatingResistivity, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_button_ResistivityVia = new wxButton( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
+ fgSizerVS_Inputs->Add( m_button_ResistivityVia, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextPermittivity = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Er:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextPermittivity->Wrap( -1 );
+ m_staticTextPermittivity->SetToolTip( _("Relative dielectric constant (epsilon r)") );
+
+ fgSizerVS_Inputs->Add( m_staticTextPermittivity, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_textCtrlPlatingPermittivity = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlPlatingPermittivity, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_button_Permittivity = new wxButton( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
+ fgSizerVS_Inputs->Add( m_button_Permittivity, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextTemperatureDiff = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Temperature rise:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTemperatureDiff->Wrap( -1 );
+ m_staticTextTemperatureDiff->SetToolTip( _("Maximum acceptable rise in temperature") );
+
+ fgSizerVS_Inputs->Add( m_staticTextTemperatureDiff, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_textCtrlTemperatureDiff = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlTemperatureDiff, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextTemperatureUnits = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("deg C"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTemperatureUnits->Wrap( -1 );
+ fgSizerVS_Inputs->Add( m_staticTextTemperatureUnits, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_staticTextRiseTime = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("Pulse rise time:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRiseTime->Wrap( -1 );
+ m_staticTextRiseTime->SetToolTip( _("Pulse rise time to calculate reactance") );
+
+ fgSizerVS_Inputs->Add( m_staticTextRiseTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_textCtrlRiseTime = new wxTextCtrl( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerVS_Inputs->Add( m_textCtrlRiseTime, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextRiseTimeUnits = new wxStaticText( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, _("ns"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRiseTimeUnits->Wrap( -1 );
+ m_staticTextRiseTimeUnits->SetToolTip( _("nanoseconds") );
+
+ fgSizerVS_Inputs->Add( m_staticTextRiseTimeUnits, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+ sbSizerVS_Inputs->Add( fgSizerVS_Inputs, 0, wxEXPAND, 5 );
+
+ m_staticline31 = new wxStaticLine( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ sbSizerVS_Inputs->Add( m_staticline31, 0, wxALL|wxEXPAND, 5 );
+
+ m_bitmap10 = new wxStaticBitmap( sbSizerVS_Inputs->GetStaticBox(), wxID_ANY, wxBitmap( via_xpm ), wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmap10->SetToolTip( _("Top view of via") );
+
+ sbSizerVS_Inputs->Add( m_bitmap10, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+
+ bSizerViaSize->Add( sbSizerVS_Inputs, 1, wxEXPAND|wxALL, 5 );
+
+ wxStaticBoxSizer* sbSizerVS_Result;
+ sbSizerVS_Result = new wxStaticBoxSizer( new wxStaticBox( m_panelViaSize, wxID_ANY, _("Results:") ), wxVERTICAL );
+
+ wxFlexGridSizer* fgSizerTW_Results11;
+ fgSizerTW_Results11 = new wxFlexGridSizer( 0, 3, 0, 0 );
+ fgSizerTW_Results11->AddGrowableCol( 1 );
+ fgSizerTW_Results11->SetFlexibleDirection( wxBOTH );
+ fgSizerTW_Results11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_staticTextArea11 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Resistance:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextArea11->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_staticTextArea11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_ViaResistance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ViaResistance->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_ViaResistance, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
+
+ m_IntTrackAreaUnitLabel1 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Ohm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_IntTrackAreaUnitLabel1->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_IntTrackAreaUnitLabel1, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_staticText65111 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Voltage drop:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText65111->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_staticText65111, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_ViaVoltageDrop = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ViaVoltageDrop->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_ViaVoltageDrop, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
+
+ m_staticText8411 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Volt"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText8411->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_staticText8411, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_staticText66111 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Power loss:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText66111->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_staticText66111, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_ViaPowerLoss = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ViaPowerLoss->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_ViaPowerLoss, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
+
+ m_staticText8311 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Watt"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText8311->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_staticText8311, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_staticText79211 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Thermal resistance:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText79211->Wrap( -1 );
+ m_staticText79211->SetToolTip( _("Using thermal conductivity value 401 Watts/(meter-Kelvin)") );
+
+ fgSizerTW_Results11->Add( m_staticText79211, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_ViaThermalResistance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ViaThermalResistance->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_ViaThermalResistance, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
+
+ m_staticText791111 = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("deg C/Watt"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText791111->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_staticText791111, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_staticTextAmpacity = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Estimated ampacity:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextAmpacity->Wrap( -1 );
+ m_staticTextAmpacity->SetToolTip( _("Based on temperature rise") );
+
+ fgSizerTW_Results11->Add( m_staticTextAmpacity, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_ViaAmpacity = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ViaAmpacity->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_ViaAmpacity, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
+
+ m_staticTextAmpacityUnits = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("A"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextAmpacityUnits->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_staticTextAmpacityUnits, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_staticTextCapacitance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Capacitance:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextCapacitance->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_staticTextCapacitance, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_ViaCapacitance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ViaCapacitance->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_ViaCapacitance, 0, wxALL, 5 );
+
+ m_staticTextCapacitanceUnits = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("pF"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextCapacitanceUnits->Wrap( -1 );
+ m_staticTextCapacitanceUnits->SetToolTip( _("pico-Farad") );
+
+ fgSizerTW_Results11->Add( m_staticTextCapacitanceUnits, 0, wxALL, 5 );
+
+ m_staticTextRiseTimeOutput = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Rise time degradation:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRiseTimeOutput->Wrap( -1 );
+ m_staticTextRiseTimeOutput->SetToolTip( _("Rise time degradation for given Z0 and calculated capacitance") );
+
+ fgSizerTW_Results11->Add( m_staticTextRiseTimeOutput, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_RiseTimeOutput = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_RiseTimeOutput->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_RiseTimeOutput, 0, wxALL, 5 );
+
+ m_staticTextRiseTimeOutputUnits = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("ps"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRiseTimeOutputUnits->Wrap( -1 );
+ m_staticTextRiseTimeOutputUnits->SetToolTip( _("picoseconds") );
+
+ fgSizerTW_Results11->Add( m_staticTextRiseTimeOutputUnits, 0, wxALL, 5 );
+
+ m_staticTextInductance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Inductance:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextInductance->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_staticTextInductance, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_Inductance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_Inductance->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_Inductance, 0, wxALL, 5 );
+
+ m_staticTextInductanceUnits = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("nH"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextInductanceUnits->Wrap( -1 );
+ m_staticTextInductanceUnits->SetToolTip( _("nano-Henry") );
+
+ fgSizerTW_Results11->Add( m_staticTextInductanceUnits, 0, wxALL, 5 );
+
+ m_staticTextReactance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Reactance:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextReactance->Wrap( -1 );
+ m_staticTextReactance->SetToolTip( _("Inductive reactance for given rise time and calculated inductance") );
+
+ fgSizerTW_Results11->Add( m_staticTextReactance, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+
+ m_Reactance = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_Reactance->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_Reactance, 0, wxALL, 5 );
+
+ m_staticTextReactanceUnits = new wxStaticText( sbSizerVS_Result->GetStaticBox(), wxID_ANY, _("Ohm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextReactanceUnits->Wrap( -1 );
+ fgSizerTW_Results11->Add( m_staticTextReactanceUnits, 0, wxALL, 5 );
+
+
+ sbSizerVS_Result->Add( fgSizerTW_Results11, 0, wxEXPAND, 5 );
+
+
+ bSizerViaSize->Add( sbSizerVS_Result, 1, wxEXPAND|wxALL, 5 );
+
+
+ m_panelViaSize->SetSizer( bSizerViaSize );
+ m_panelViaSize->Layout();
+ bSizerViaSize->Fit( m_panelViaSize );
+ m_Notebook->AddPage( m_panelViaSize, _("Via Size"), true );
m_panelElectricalSpacing = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* bSizerElectricalClearance;
bSizerElectricalClearance = new wxBoxSizer( wxHORIZONTAL );
@@ -1330,14 +1658,14 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow
m_panelBoardClass->SetSizer( bSizerBoardClass );
m_panelBoardClass->Layout();
bSizerBoardClass->Fit( m_panelBoardClass );
- m_Notebook->AddPage( m_panelBoardClass, _("Board Classes"), true );
+ m_Notebook->AddPage( m_panelBoardClass, _("Board Classes"), false );
bmainFrameSizer->Add( m_Notebook, 1, wxEXPAND, 5 );
this->SetSizer( bmainFrameSizer );
this->Layout();
-
+ bmainFrameSizer->Fit( this );
this->Centre( wxBOTH );
// Connect Events
@@ -1362,6 +1690,27 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow
m_TW_IntTrackWidth_choiceUnit->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this );
m_IntTrackThicknessValue->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this );
m_IntTrackThicknessUnit->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this );
+ m_textCtrlHoleDia->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceHoleDia->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlPlatingThickness->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choicePlatingThickness->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlViaLength->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceViaLength->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlViaPadDia->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceViaPadDia->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlClearanceDia->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceClearanceDia->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlBoardThickness->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceBoardThickness->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlImpedance->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceImpedance->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlAppliedCurrent->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlPlatingResistivity->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_button_ResistivityVia->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaRho_Button ), NULL, this );
+ m_textCtrlPlatingPermittivity->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_button_Permittivity->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaEpsilonR_Button ), NULL, this );
+ m_textCtrlTemperatureDiff->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlRiseTime->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
m_ElectricalSpacingUnitsSelector->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingUnitsSelection ), NULL, this );
m_buttonElectSpacingRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingRefresh ), NULL, this );
m_TranslineSelection->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTranslineSelection ), NULL, this );
@@ -1405,6 +1754,27 @@ PCB_CALCULATOR_FRAME_BASE::~PCB_CALCULATOR_FRAME_BASE()
m_TW_IntTrackWidth_choiceUnit->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this );
m_IntTrackThicknessValue->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this );
m_IntTrackThicknessUnit->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this );
+ m_textCtrlHoleDia->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceHoleDia->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlPlatingThickness->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choicePlatingThickness->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlViaLength->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceViaLength->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlViaPadDia->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceViaPadDia->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlClearanceDia->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceClearanceDia->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlBoardThickness->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceBoardThickness->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlImpedance->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_choiceImpedance->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlAppliedCurrent->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlPlatingResistivity->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_button_ResistivityVia->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaRho_Button ), NULL, this );
+ m_textCtrlPlatingPermittivity->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_button_Permittivity->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaEpsilonR_Button ), NULL, this );
+ m_textCtrlTemperatureDiff->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
+ m_textCtrlRiseTime->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnViaCalculate ), NULL, this );
m_ElectricalSpacingUnitsSelector->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingUnitsSelection ), NULL, this );
m_buttonElectSpacingRefresh->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingRefresh ), NULL, this );
m_TranslineSelection->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTranslineSelection ), NULL, this );
diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp
index 914865e6a7..89eae2c0c5 100644
--- a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp
+++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp
@@ -1,6 +1,6 @@
-
+
@@ -3993,6 +5864,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4054,6 +5955,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4115,6 +6046,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4176,6 +6137,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4237,6 +6228,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4298,6 +6319,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4359,6 +6410,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4420,6 +6501,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4481,6 +6592,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4542,6 +6683,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4603,6 +6774,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4664,6 +6865,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4682,6 +6913,7 @@
wxVERTICAL
1
none
+
5
wxEXPAND
@@ -4757,6 +6989,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4821,7 +7083,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
OnTWCalculateFromIntWidth
+
+
+
+
@@ -4886,7 +7181,37 @@
+
+
+
+
+
+
+
+
OnTWParametersChanged
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4948,6 +7273,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5012,7 +7367,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
OnTWParametersChanged
+
+
+
+
@@ -5077,7 +7465,37 @@
+
+
+
+
+
+
+
+
OnTWParametersChanged
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5139,6 +7557,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5200,6 +7648,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5261,6 +7739,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5322,6 +7830,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5383,6 +7921,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5444,6 +8012,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5505,6 +8103,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5566,6 +8194,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5627,6 +8285,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5688,6 +8376,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5749,6 +8467,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5810,6 +8558,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5822,6 +8600,6210 @@
+
+ Via Size
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_panelViaSize
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ 0
+
+
+
+ wxTAB_TRAVERSAL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ bSizerViaSize
+ wxHORIZONTAL
+ none
+
+ 5
+ wxEXPAND|wxALL
+ 1
+
+ wxID_ANY
+ Parameters:
+
+ sbSizerVS_Inputs
+ wxVERTICAL
+ 1
+ none
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 3
+ wxBOTH
+ 1
+
+ 0
+
+ fgSizerVS_Inputs
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 0
+ 0
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+ ,90,90,-1,70,0
+ 0
+ 0
+ wxID_ANY
+ D:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextHoleDia
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Finished hole dia
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlHoleDia
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_choiceHoleDia
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+ UNIT_SELECTOR_LEN; UnitSelector.h
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ T:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextPlatingThickness
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Plating thickness
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlPlatingThickness
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_choicePlatingThickness
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+ UNIT_SELECTOR_LEN; UnitSelector.h; Not forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Via length:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextViaLength
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlViaLength
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_choiceViaLength
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+ UNIT_SELECTOR_LEN; UnitSelector.h; Not forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Via pad dia:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextViaPadDia
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Diameter of pad surrounding via
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlViaPadDia
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_choiceViaPadDia
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+ UNIT_SELECTOR_LEN; UnitSelector.h; Not forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Clearance hole dia:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextClearanceDia
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Diameter of clearance hole in ground plane(s)
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlClearanceDia
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_choiceClearanceDia
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+ UNIT_SELECTOR_LEN; UnitSelector.h; Not forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ PCB thickness:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextBoardThickness
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlBoardThickness
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_choiceBoardThickness
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+ UNIT_SELECTOR_LEN; UnitSelector.h; Not forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Z0:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextImpedance
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Characteristic impedance of conductor
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlImpedance
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_choiceImpedance
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+ UNIT_SELECTOR_RESISTOR; UnitSelector.h; Not forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Applied current:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticAppliedCurrent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlAppliedCurrent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ A
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextAppliedCurrentUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Plating resistivity:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextResistivity
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Specific resistance in ohms * meters
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlPlatingResistivity
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+
+ 0
+ 0
+
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+
+ 0
+ 0
+ wxID_ANY
+ ...
+
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_button_ResistivityVia
+ 1
+
+
+ protected
+ 1
+
+
+
+ Resizable
+ 1
+
+ wxBU_EXACTFIT
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+ OnViaRho_Button
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Er:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextPermittivity
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Relative dielectric constant (epsilon r)
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlPlatingPermittivity
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+
+ 0
+ 0
+
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+
+ 0
+ 0
+ wxID_ANY
+ ...
+
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_button_Permittivity
+ 1
+
+
+ protected
+ 1
+
+
+
+ Resizable
+ 1
+
+ wxBU_EXACTFIT
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+ OnViaEpsilonR_Button
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Temperature rise:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextTemperatureDiff
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Maximum acceptable rise in temperature
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlTemperatureDiff
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ deg C
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextTemperatureUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Pulse rise time:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextRiseTime
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Pulse rise time to calculate reactance
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_textCtrlRiseTime
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnViaCalculate
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ ns
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextRiseTimeUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ nanoseconds
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticline31
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxLI_HORIZONTAL
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_HORIZONTAL|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+ Load From File; ../bitmaps/via.xpm
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_bitmap10
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ ; ; forward_declare
+ 0
+ Top view of via
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxALL
+ 1
+
+ wxID_ANY
+ Results:
+
+ sbSizerVS_Result
+ wxVERTICAL
+ 1
+ none
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 3
+ wxBOTH
+ 1
+
+ 0
+
+ fgSizerTW_Results11
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 0
+ 0
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Resistance:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextArea11
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ dummy
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaResistance
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Ohm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_IntTrackAreaUnitLabel1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Voltage drop:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticText65111
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ dummy
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaVoltageDrop
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Volt
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticText8411
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Power loss:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticText66111
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ dummy
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaPowerLoss
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Watt
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticText8311
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Thermal resistance:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticText79211
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Using thermal conductivity value 401 Watts/(meter-Kelvin)
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ dummy
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaThermalResistance
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ deg C/Watt
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticText791111
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Estimated ampacity:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextAmpacity
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Based on temperature rise
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ dummy
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaAmpacity
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ A
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextAmpacityUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Capacitance:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextCapacitance
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ dummy
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaCapacitance
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ pF
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextCapacitanceUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ pico-Farad
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Rise time degradation:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextRiseTimeOutput
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Rise time degradation for given Z0 and calculated capacitance
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ dummy
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_RiseTimeOutput
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ ps
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextRiseTimeOutputUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ picoseconds
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Inductance:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextInductance
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ dummy
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_Inductance
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ nH
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextInductanceUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ nano-Henry
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Reactance:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextReactance
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+ Inductive reactance for given rise time and calculated inductance
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ dummy
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_Reactance
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Ohm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticTextReactanceUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Electrical Spacing
0
@@ -5876,6 +14858,36 @@
wxTAB_TRAVERSAL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
bSizerElectricalClearance
@@ -5952,7 +14964,37 @@
+
+
+
+
+
+
+
+
OnElectricalSpacingUnitsSelection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6011,6 +15053,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6072,6 +15144,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6136,6 +15238,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6208,7 +15344,37 @@
+
+
+
+
+
+
OnElectricalSpacingRefresh
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6281,6 +15447,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6304,15 +15500,15 @@
1
- wxALIGN_CENTER
+ wxALIGN_CENTRE
wxALIGN_TOP
0
1
- wxALIGN_CENTER
+ wxALIGN_CENTRE
70
"B1" "B2" "B3" "B4" "A5" "A6" "A7"
- wxALIGN_CENTER
+ wxALIGN_CENTRE
7
@@ -6358,7 +15554,7 @@
wxALIGN_RIGHT
100
"0 ... 15V" "16 ... 30V" "31 ... 50V" "51 ... 100V" "101 ... 150V" "151 ... 170V" "171 ... 250V" "251 ... 300V" "301 ... 500V" " > 500V"
- wxALIGN_CENTER
+ wxALIGN_CENTRE
10
1
@@ -6369,6 +15565,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6430,6 +15688,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6441,7 +15729,7 @@
TransLine
0
-
+
1
1
1
@@ -6492,7 +15780,37 @@
wxTAB_TRAVERSAL
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
bSizeTransline
wxHORIZONTAL
@@ -6570,7 +15888,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
OnTranslineSelection
+
+
+
+
+
+
@@ -6628,7 +15976,36 @@
wxTAB_TRAVERSAL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
OnPaintTranslinePanel
+
+
+
+
+
+
@@ -6689,13 +16066,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
5
wxALL|wxEXPAND
1
-
+
bMiddleSizer
wxVERTICAL
@@ -6712,6 +16119,7 @@
wxVERTICAL
1
none
+
5
wxEXPAND|wxTOP|wxBOTTOM
@@ -6787,6 +16195,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6851,6 +16289,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6923,7 +16395,37 @@
+
+
+
+
+
+
OnTranslineEpsilonR_Button
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6985,6 +16487,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7049,6 +16581,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7121,7 +16687,37 @@
+
+
+
+
+
+
OnTranslineTanD_Button
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7183,6 +16779,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7247,6 +16873,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7319,7 +16979,37 @@
+
+
+
+
+
+
OnTranslineRho_Button
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7381,6 +17071,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7445,6 +17165,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7509,6 +17263,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7570,6 +17355,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7634,6 +17449,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7698,6 +17547,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7759,6 +17639,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7823,6 +17733,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7887,6 +17831,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7948,6 +17923,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8012,6 +18017,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8076,6 +18115,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8137,6 +18207,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8201,6 +18301,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8265,6 +18399,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8326,6 +18491,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8390,6 +18585,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8454,6 +18683,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8472,6 +18732,7 @@
wxVERTICAL
1
none
+
5
wxEXPAND|wxTOP|wxBOTTOM
@@ -8547,6 +18808,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8611,6 +18902,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8675,26 +19000,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
5
wxALIGN_CENTER_HORIZONTAL
1
-
+
bSizerHelpBitmaps
wxVERTICAL
none
-
+
5
wxALL
0
-
+
1
1
1
@@ -8746,13 +19102,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
5
wxEXPAND
0
-
+
2
wxBOTH
0,1
@@ -8764,11 +19150,11 @@
protected
0
0
-
+
5
wxALL
0
-
+
1
1
1
@@ -8823,13 +19209,43 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
5
wxALL
0
-
+
1
1
1
@@ -8884,6 +19300,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8892,11 +19338,11 @@
-
+
5
wxEXPAND
1
-
+
bRightSizer
wxVERTICAL
@@ -8913,6 +19359,7 @@
wxVERTICAL
1
none
+
5
wxBOTTOM|wxEXPAND
@@ -8997,6 +19444,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9061,6 +19538,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9125,6 +19636,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9189,6 +19731,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9250,6 +19823,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9314,6 +19917,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9378,6 +20015,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9442,6 +20110,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9503,6 +20202,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9567,6 +20296,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9631,6 +20394,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9667,11 +20461,11 @@
bSizerButtons
wxHORIZONTAL
none
-
+
5
wxALL|wxALIGN_CENTER_VERTICAL
0
-
+
1
1
1
@@ -9737,7 +20531,37 @@
+
+
+
+
+
+
OnTranslineAnalyse
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9810,7 +20634,37 @@
+
+
+
+
+
+
OnTranslineAnalyse
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9883,14 +20737,44 @@
+
+
+
+
+
+
OnTranslineSynthetize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
5
wxALL|wxALIGN_CENTER_VERTICAL
0
-
+
1
1
1
@@ -9956,7 +20840,37 @@
+
+
+
+
+
+
OnTranslineSynthetize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9975,6 +20889,7 @@
wxVERTICAL
1
none
+
5
wxEXPAND|wxTOP|wxBOTTOM
@@ -10050,6 +20965,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10114,6 +21059,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10178,6 +21157,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10239,6 +21249,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10303,6 +21343,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10367,6 +21441,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10428,6 +21533,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10492,6 +21627,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10556,17 +21725,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
5
wxEXPAND|wxTOP
1
-
+
wxID_ANY
Results:
@@ -10574,6 +21774,7 @@
wxVERTICAL
1
none
+
5
wxEXPAND
@@ -10649,6 +21850,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10710,6 +21941,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10771,6 +22032,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10832,6 +22123,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10893,6 +22214,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -10954,6 +22305,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11015,6 +22396,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11076,6 +22487,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11137,6 +22578,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11198,6 +22669,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11259,6 +22760,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11320,6 +22851,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11381,6 +22942,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11442,6 +23033,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11453,11 +23074,11 @@
-
+
RF Attenuators
0
-
+
1
1
1
@@ -11508,12 +23129,42 @@
wxTAB_TRAVERSAL
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
bSizerAtt
wxHORIZONTAL
none
-
+
5
wxEXPAND
0
@@ -11586,7 +23237,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
OnAttenuatorSelection
+
+
+
+
+
+
@@ -11644,12 +23325,41 @@
wxTAB_TRAVERSAL|wxBORDER_SIMPLE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
OnPaintAttenuatorPanel
+
+
+
+
+
+
-
+
5
wxEXPAND
0
@@ -11670,6 +23380,7 @@
wxVERTICAL
1
none
+
5
wxEXPAND
@@ -11745,6 +23456,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11809,6 +23550,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11870,6 +23645,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11931,6 +23736,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11995,6 +23830,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12056,6 +23925,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12117,6 +24016,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12181,6 +24110,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12242,6 +24205,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12327,7 +24320,37 @@
+
+
+
+
+
+
OnCalculateAttenuator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12400,7 +24423,37 @@
+
+
+
+
+
+
OnCalculateAttenuator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12417,6 +24470,7 @@
wxVERTICAL
1
none
+
5
wxEXPAND|wxTOP|wxBOTTOM
@@ -12492,6 +24546,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12556,6 +24640,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12617,6 +24735,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12678,6 +24826,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12742,6 +24920,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12803,6 +25015,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12864,6 +25106,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12928,6 +25200,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12989,6 +25295,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13054,6 +25390,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13112,6 +25478,39 @@
wxBORDER_SIMPLE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13128,11 +25527,12 @@
wxVERTICAL
1
none
-
+
+
5
wxALL|wxEXPAND
1
-
+
1
1
1
@@ -13184,6 +25584,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13191,11 +25624,11 @@
-
+
Color Code
0
-
+
1
1
1
@@ -13246,6 +25679,36 @@
wxTAB_TRAVERSAL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
bSizerPanelColorCode
@@ -13315,7 +25778,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
OnToleranceSelection
+
+
+
+
+
+
@@ -13393,6 +25886,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13454,6 +25977,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13515,6 +26068,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13576,6 +26159,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13637,6 +26250,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13698,6 +26341,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13756,6 +26429,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13814,6 +26517,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13872,6 +26605,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13930,6 +26693,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13988,6 +26781,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -14046,6 +26869,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -14053,11 +26906,11 @@
-
+
Board Classes
- 1
-
+ 0
+
1
1
1
@@ -14108,7 +26961,37 @@
wxTAB_TRAVERSAL
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
bSizerBoardClass
wxHORIZONTAL
@@ -14175,14 +27058,44 @@
+
+
+
+
+
+
+
+
OnBoardClassesUnitsSelection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
5
wxEXPAND
1
-
+
brdclsSizerRight
wxVERTICAL
@@ -14246,6 +27159,36 @@
-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -14269,15 +27212,15 @@
1
- wxALIGN_CENTER
+ wxALIGN_CENTRE
wxALIGN_TOP
0
1
- wxALIGN_CENTER
+ wxALIGN_CENTRE
70
"Class 1" "Class 2" "Class 3" "Class 4" "Class 5" "Class 6"
- wxALIGN_CENTER
+ wxALIGN_CENTRE
6
@@ -14323,7 +27266,7 @@
wxALIGN_RIGHT
160
"Lines width" "Min clearance" "Via: (diam - drill)" "Plated Pad: (diam - drill)" "NP Pad: (diam - drill)"
- wxALIGN_CENTER
+ wxALIGN_CENTRE
5
1
@@ -14334,6 +27277,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -14391,6 +27396,36 @@
wxTAB_TRAVERSAL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.h b/pcb_calculator/dialogs/pcb_calculator_frame_base.h
index 14197d3ef7..abc926aa3e 100644
--- a/pcb_calculator/dialogs/pcb_calculator_frame_base.h
+++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.h
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version v3.8.0)
+// C++ code generated with wxFormBuilder (version Aug 8 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@@ -16,6 +16,7 @@ class UNIT_SELECTOR_LEN;
class UNIT_SELECTOR_RESISTOR;
class UNIT_SELECTOR_THICKNESS;
+#include "UnitSelector.h"
#include "kiway_player.h"
#include
#include
@@ -144,6 +145,72 @@ class PCB_CALCULATOR_FRAME_BASE : public KIWAY_PLAYER
wxStaticText* m_staticText792;
wxStaticText* m_IntTrackLossValue;
wxStaticText* m_staticText7911;
+ wxPanel* m_panelViaSize;
+ wxStaticText* m_staticTextHoleDia;
+ wxTextCtrl* m_textCtrlHoleDia;
+ UNIT_SELECTOR_LEN* m_choiceHoleDia;
+ wxStaticText* m_staticTextPlatingThickness;
+ wxTextCtrl* m_textCtrlPlatingThickness;
+ UNIT_SELECTOR_LEN* m_choicePlatingThickness;
+ wxStaticText* m_staticTextViaLength;
+ wxTextCtrl* m_textCtrlViaLength;
+ UNIT_SELECTOR_LEN* m_choiceViaLength;
+ wxStaticText* m_staticTextViaPadDia;
+ wxTextCtrl* m_textCtrlViaPadDia;
+ UNIT_SELECTOR_LEN* m_choiceViaPadDia;
+ wxStaticText* m_staticTextClearanceDia;
+ wxTextCtrl* m_textCtrlClearanceDia;
+ UNIT_SELECTOR_LEN* m_choiceClearanceDia;
+ wxStaticText* m_staticTextBoardThickness;
+ wxTextCtrl* m_textCtrlBoardThickness;
+ UNIT_SELECTOR_LEN* m_choiceBoardThickness;
+ wxStaticText* m_staticTextImpedance;
+ wxTextCtrl* m_textCtrlImpedance;
+ UNIT_SELECTOR_RESISTOR* m_choiceImpedance;
+ wxStaticText* m_staticAppliedCurrent;
+ wxTextCtrl* m_textCtrlAppliedCurrent;
+ wxStaticText* m_staticTextAppliedCurrentUnits;
+ wxStaticText* m_staticTextResistivity;
+ wxTextCtrl* m_textCtrlPlatingResistivity;
+ wxButton* m_button_ResistivityVia;
+ wxStaticText* m_staticTextPermittivity;
+ wxTextCtrl* m_textCtrlPlatingPermittivity;
+ wxButton* m_button_Permittivity;
+ wxStaticText* m_staticTextTemperatureDiff;
+ wxTextCtrl* m_textCtrlTemperatureDiff;
+ wxStaticText* m_staticTextTemperatureUnits;
+ wxStaticText* m_staticTextRiseTime;
+ wxTextCtrl* m_textCtrlRiseTime;
+ wxStaticText* m_staticTextRiseTimeUnits;
+ wxStaticLine* m_staticline31;
+ wxStaticBitmap* m_bitmap10;
+ wxStaticText* m_staticTextArea11;
+ wxStaticText* m_ViaResistance;
+ wxStaticText* m_IntTrackAreaUnitLabel1;
+ wxStaticText* m_staticText65111;
+ wxStaticText* m_ViaVoltageDrop;
+ wxStaticText* m_staticText8411;
+ wxStaticText* m_staticText66111;
+ wxStaticText* m_ViaPowerLoss;
+ wxStaticText* m_staticText8311;
+ wxStaticText* m_staticText79211;
+ wxStaticText* m_ViaThermalResistance;
+ wxStaticText* m_staticText791111;
+ wxStaticText* m_staticTextAmpacity;
+ wxStaticText* m_ViaAmpacity;
+ wxStaticText* m_staticTextAmpacityUnits;
+ wxStaticText* m_staticTextCapacitance;
+ wxStaticText* m_ViaCapacitance;
+ wxStaticText* m_staticTextCapacitanceUnits;
+ wxStaticText* m_staticTextRiseTimeOutput;
+ wxStaticText* m_RiseTimeOutput;
+ wxStaticText* m_staticTextRiseTimeOutputUnits;
+ wxStaticText* m_staticTextInductance;
+ wxStaticText* m_Inductance;
+ wxStaticText* m_staticTextInductanceUnits;
+ wxStaticText* m_staticTextReactance;
+ wxStaticText* m_Reactance;
+ wxStaticText* m_staticTextReactanceUnits;
wxPanel* m_panelElectricalSpacing;
UNIT_SELECTOR_LEN* m_ElectricalSpacingUnitsSelector;
wxStaticLine* m_staticline2;
@@ -288,6 +355,9 @@ class PCB_CALCULATOR_FRAME_BASE : public KIWAY_PLAYER
virtual void OnTWParametersChanged( wxCommandEvent& event ) { event.Skip(); }
virtual void OnTWCalculateFromExtWidth( wxCommandEvent& event ) { event.Skip(); }
virtual void OnTWCalculateFromIntWidth( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnViaCalculate( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnViaRho_Button( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnViaEpsilonR_Button( wxCommandEvent& event ) { event.Skip(); }
virtual void OnElectricalSpacingUnitsSelection( wxCommandEvent& event ) { event.Skip(); }
virtual void OnElectricalSpacingRefresh( wxCommandEvent& event ) { event.Skip(); }
virtual void OnTranslineSelection( wxCommandEvent& event ) { event.Skip(); }
@@ -306,7 +376,7 @@ class PCB_CALCULATOR_FRAME_BASE : public KIWAY_PLAYER
public:
- PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PCB Calculator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 877,580 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxTAB_TRAVERSAL, const wxString& name = wxT("pcb_calculator") );
+ PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PCB Calculator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxTAB_TRAVERSAL, const wxString& name = wxT("pcb_calculator") );
~PCB_CALCULATOR_FRAME_BASE();
diff --git a/pcb_calculator/pcb_calculator.h b/pcb_calculator/pcb_calculator.h
index b4389f101e..355f1293ac 100644
--- a/pcb_calculator/pcb_calculator.h
+++ b/pcb_calculator/pcb_calculator.h
@@ -176,6 +176,44 @@ private:
*/
void TWUpdateModeDisplay();
+ // Via size calculations
+
+ /**
+ * Function VS_Init
+ * Read config and init dialog widgets values
+ */
+ void VS_Init( wxConfigBase* aCfg );
+
+ /**
+ * Function VS_WriteConfig
+ * Write Via Size prameters in config
+ */
+ void VS_WriteConfig( wxConfigBase* aCfg );
+
+ /**
+ * Function OnViaCalculate
+ * Called when the user changes any value in the via calcultor.
+ */
+ void OnViaCalculate( wxCommandEvent& event ) override;
+
+ /**
+ * Function OnViaEpsilonR_Button
+ */
+ void OnViaEpsilonR_Button( wxCommandEvent& event ) override;
+
+ /**
+ * Function OnViaRho_Button
+ */
+ void OnViaRho_Button( wxCommandEvent& event ) override;
+
+ /**
+ * Function VSDisplayValues
+ * Displays the results of the calculation.
+ */
+ void VSDisplayValues( double aViaResistance, double aVoltageDrop, double aPowerLoss,
+ double aEstimatedAmpacity, double aThermalResistance, double aCapacitance,
+ double aTimeDegradation, double aInductance, double aReactance );
+
// Electrical spacing panel:
void OnElectricalSpacingUnitsSelection( wxCommandEvent& event ) override;
void OnElectricalSpacingRefresh( wxCommandEvent& event ) override;
diff --git a/pcb_calculator/pcb_calculator_frame.cpp b/pcb_calculator/pcb_calculator_frame.cpp
index d65e6bd7dd..905fa9d36f 100644
--- a/pcb_calculator/pcb_calculator_frame.cpp
+++ b/pcb_calculator/pcb_calculator_frame.cpp
@@ -93,6 +93,8 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
TW_Init( config.get() );
+ VS_Init( config.get() );
+
SetAttenuator( m_AttenuatorsSelection->GetSelection() );
ToleranceSelection( m_rbToleranceSelection->GetSelection() );
@@ -269,6 +271,8 @@ void PCB_CALCULATOR_FRAME::SaveSettings( wxConfigBase* aCfg )
TW_WriteConfig( aCfg );
+ VS_WriteConfig( aCfg );
+
for( unsigned ii = 0; ii < m_transline_list.size(); ii++ )
m_transline_list[ii]->WriteConfig( aCfg );
diff --git a/pcb_calculator/via.cpp b/pcb_calculator/via.cpp
new file mode 100644
index 0000000000..7bdac91735
--- /dev/null
+++ b/pcb_calculator/via.cpp
@@ -0,0 +1,308 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2019 Kicad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* All calculations are based on this [1] online calculator:
+ *
+ * References:
+ *
+ * [1]: The CircuitCalculator.com Blog - PCB Via Calculator
+ * http://circuitcalculator.com/wordpress/2006/03/12/pcb-via-calculator/
+ *
+ * [2]: Constructing Your Power Supply - Layout Considerations
+ * https://www.ti.com/seclit/ml/slup230/slup230.pdf
+ *
+ * [3]: Current Carrying Capacity of Vias - Some Conceptual Observations
+ * https://www.ultracad.com/articles/viacurrents.pdf
+ *
+ * [4]: IPC-2221A - Generic Standard on Printed Board Design
+ * http://www.sphere.bc.ca/class/downloads/ipc_2221a-pcb%20standards.pdf
+ *
+ * [5]: Copper - online catalogue source - Goodfellow
+ * http://www.goodfellow.com/E/Copper.html
+ *
+ * [6]: Thermal Conductivity of Metals, Metallic Elements and Alloys
+ * https://www.engineeringtoolbox.com/thermal-conductivity-metals-d_858.html
+ *
+ * [7]: Johnson & Graham, High Speed Digital Design: A Handbook of Black Magic
+ */
+
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+#include
+
+extern double DoubleFromString( const wxString& TextValue );
+
+// Key words to read/write some parameters in config:
+#define KEYWORD_VS_HOLE_DIA wxT( "VS_Hole_Dia" )
+#define KEYWORD_VS_HOLE_DIA_UNIT wxT( "VS_Hole_Dia_Unit" )
+#define KEYWORD_VS_THICKNESS wxT( "VS_Plating_Thickness" )
+#define KEYWORD_VS_THICKNESS_UNIT wxT( "VS_Plating_Thickness_Unit" )
+#define KEYWORD_VS_LENGTH wxT( "VS_Via_Length" )
+#define KEYWORD_VS_LENGTH_UNIT wxT( "VS_Via_Length_Unit" )
+#define KEYWORD_VS_PAD_DIA wxT( "VS_Pad_Dia" )
+#define KEYWORD_VS_PAD_DIA_UNIT wxT( "VS_Pad_Dia_Unit" )
+#define KEYWORD_VS_CLEARANCE_DIA wxT( "VS_Clearance_Dia" )
+#define KEYWORD_VS_CLEARANCE_DIA_UNIT wxT( "VS_Clearance_Dia_Unit" )
+#define KEYWORD_VS_PCB_THICKNESS wxT( "VS_PCB_Thickness" )
+#define KEYWORD_VS_PCB_THICKNESS_UNIT wxT( "VS_PCB_Thickness_Unit" )
+#define KEYWORD_VS_CH_IMPEDANCE wxT( "VS_Characteristic_Impedance" )
+#define KEYWORD_VS_CH_IMPEDANCE_UNIT wxT( "VS_Characteristic_Impedance_Unit" )
+#define KEYWORD_VS_CURRENT wxT( "VS_Current" )
+#define KEYWORD_VS_RESISTIVITY wxT( "VS_Resistivity" )
+#define KEYWORD_VS_PERMITTIVITY wxT( "VS_Permittivity" )
+#define KEYWORD_VS_TEMP_DIFF wxT( "VS_Temperature_Differential" )
+#define KEYWORD_VS_PULSE_RISE_TIME wxT( "VS_Pulse_Rise_Time" )
+
+/**
+ * Shows a list of current relative dielectric constant(Er)
+ * and set the selected value in main dialog frame
+ */
+void PCB_CALCULATOR_FRAME::OnViaEpsilonR_Button( wxCommandEvent& event )
+{
+ wxArrayString list;
+
+ // EpsilonR ( relative dielectric constant) list
+ list.Add( wxT( "4.5 FR4" ) );
+ list.Add( wxT( "9.8 alumina (Al2O3)" ) );
+ list.Add( wxT( "3.78 fused quartz" ) );
+ list.Add( wxT( "3.38 RO4003" ) );
+ list.Add( wxT( "2.2 RT/duroid 5880" ) );
+ list.Add( wxT( "10.2 RT/duroid 6010LM" ) );
+ list.Add( wxT( "2.1 teflon (PTFE)" ) );
+ list.Add( wxT( "4.0 PVC" ) );
+ list.Add( wxT( "2.3 PE" ) );
+ list.Add( wxT( "6.6 beryllia (BeO)" ) );
+ list.Add( wxT( "8.7 aluminum nitride" ) );
+ list.Add( wxT( "11.9 silicon" ) );
+ list.Add( wxT( "12.9 GaAs" ) );
+
+ wxString value = wxGetSingleChoice( wxEmptyString,
+ _("Relative Dielectric Constants"), list).BeforeFirst( ' ' );
+ if( ! value.IsEmpty() )
+ m_textCtrlPlatingPermittivity->SetValue( value );
+}
+
+/**
+ * Shows a list of current Specific resistance list (rho)
+ * and set the selected value in main dialog frame
+ */
+void PCB_CALCULATOR_FRAME::OnViaRho_Button( wxCommandEvent& event )
+{
+ wxArrayString list;
+
+ // Specific resistance list in ohms*meters (rho):
+ list.Clear();
+ list.Add( wxT( "2.4e-8 gold" ) );
+ list.Add( wxT( "1.72e-8 copper" ) );
+ list.Add( wxT( "1.62e-8 silver" ) );
+ list.Add( wxT( "12.4e-8 tin" ) );
+ list.Add( wxT( "10.5e-8 platinum" ) );
+ list.Add( wxT( "2.62e-8 aluminum" ) );
+ list.Add( wxT( "6.9e-8 nickel" ) );
+ list.Add( wxT( "3.9e-8 brass (66Cu 34Zn)" ) );
+ list.Add( wxT( "9.71e-8 iron" ) );
+ list.Add( wxT( "6.0e-8 zinc" ) );
+
+ wxString value = wxGetSingleChoice( wxEmptyString,
+ _("Specific Resistance"), list).BeforeFirst( ' ' );
+ if( ! value.IsEmpty() )
+ m_textCtrlPlatingResistivity->SetValue( value );
+}
+
+void PCB_CALCULATOR_FRAME::VS_Init( wxConfigBase* aCfg )
+{
+ int tmp;
+ wxString msg;
+
+ // Read parameter values
+ aCfg->Read( KEYWORD_VS_HOLE_DIA, &msg, wxT( "18" ) );
+ m_textCtrlHoleDia->SetValue( msg );
+ aCfg->Read( KEYWORD_VS_HOLE_DIA_UNIT, &tmp, 0 );
+ m_choiceHoleDia->SetSelection( tmp );
+ aCfg->Read( KEYWORD_VS_THICKNESS, &msg, wxT( "1" ) );
+ m_textCtrlPlatingThickness->SetValue( msg );
+ aCfg->Read( KEYWORD_VS_THICKNESS_UNIT, &tmp, 0 );
+ m_choicePlatingThickness->SetSelection( tmp );
+ aCfg->Read( KEYWORD_VS_LENGTH, &msg, wxT( "60" ) );
+ m_textCtrlViaLength->SetValue( msg );
+ aCfg->Read( KEYWORD_VS_LENGTH_UNIT, &tmp, 0 );
+ m_choiceViaLength->SetSelection( tmp );
+ aCfg->Read( KEYWORD_VS_PAD_DIA, &msg, wxT( "22" ) );
+ m_textCtrlViaPadDia->SetValue( msg );
+ aCfg->Read( KEYWORD_VS_PAD_DIA_UNIT, &tmp, 0 );
+ m_choiceViaPadDia->SetSelection( tmp );
+ aCfg->Read( KEYWORD_VS_CLEARANCE_DIA, &msg, wxT( "25" ) );
+ m_textCtrlClearanceDia->SetValue( msg );
+ aCfg->Read( KEYWORD_VS_CLEARANCE_DIA_UNIT, &tmp, 0 );
+ m_choiceClearanceDia->SetSelection( tmp );
+ aCfg->Read( KEYWORD_VS_PCB_THICKNESS, &msg, wxT( "70" ) );
+ m_textCtrlBoardThickness->SetValue( msg );
+ aCfg->Read( KEYWORD_VS_PCB_THICKNESS_UNIT, &tmp, 0 );
+ m_choiceBoardThickness->SetSelection( tmp );
+ aCfg->Read( KEYWORD_VS_CH_IMPEDANCE, &msg, wxT( "50" ) );
+ m_textCtrlImpedance->SetValue( msg );
+ aCfg->Read( KEYWORD_VS_CH_IMPEDANCE_UNIT , &tmp, 0 );
+ m_choiceImpedance->SetSelection( tmp );
+ aCfg->Read( KEYWORD_VS_CURRENT, &msg, wxT( "1" ) );
+ m_textCtrlAppliedCurrent->SetValue( msg );
+ aCfg->Read( KEYWORD_VS_RESISTIVITY, &msg, wxT( "1.72e-8" ) );
+ m_textCtrlPlatingResistivity->SetValue( msg );
+ aCfg->Read( KEYWORD_VS_PERMITTIVITY, &msg, wxT( "4.5" ) );
+ m_textCtrlPlatingPermittivity->SetValue( msg );
+ aCfg->Read( KEYWORD_VS_TEMP_DIFF, &msg, wxT( "10" ) );
+ m_textCtrlTemperatureDiff->SetValue( msg );
+ aCfg->Read( KEYWORD_VS_PULSE_RISE_TIME, &msg, wxT( "1" ) );
+ m_textCtrlRiseTime->SetValue( msg );
+}
+
+void PCB_CALCULATOR_FRAME::VS_WriteConfig( wxConfigBase* aCfg )
+{
+ // Save current parameters values in config
+ aCfg->Write( KEYWORD_VS_HOLE_DIA, m_textCtrlHoleDia->GetValue() );
+ aCfg->Write( KEYWORD_VS_HOLE_DIA_UNIT, m_choiceHoleDia->GetSelection() );
+ aCfg->Write( KEYWORD_VS_THICKNESS, m_textCtrlPlatingThickness->GetValue() );
+ aCfg->Write( KEYWORD_VS_THICKNESS_UNIT, m_choicePlatingThickness->GetSelection() );
+ aCfg->Write( KEYWORD_VS_LENGTH, m_textCtrlViaLength->GetValue() );
+ aCfg->Write( KEYWORD_VS_LENGTH_UNIT, m_choiceViaLength->GetSelection() );
+ aCfg->Write( KEYWORD_VS_PAD_DIA, m_textCtrlViaPadDia->GetValue() );
+ aCfg->Write( KEYWORD_VS_PAD_DIA_UNIT, m_choiceViaPadDia->GetSelection() );
+ aCfg->Write( KEYWORD_VS_CLEARANCE_DIA, m_textCtrlClearanceDia->GetValue() );
+ aCfg->Write( KEYWORD_VS_CLEARANCE_DIA_UNIT, m_choiceClearanceDia->GetSelection() );
+ aCfg->Write( KEYWORD_VS_PCB_THICKNESS, m_textCtrlBoardThickness->GetValue() );
+ aCfg->Write( KEYWORD_VS_PCB_THICKNESS_UNIT, m_choiceBoardThickness->GetSelection() );
+ aCfg->Write( KEYWORD_VS_CH_IMPEDANCE, m_textCtrlImpedance->GetValue() );
+ aCfg->Write( KEYWORD_VS_CH_IMPEDANCE_UNIT, m_choiceImpedance->GetSelection() );
+ aCfg->Write( KEYWORD_VS_CURRENT, m_textCtrlAppliedCurrent->GetValue() );
+ aCfg->Write( KEYWORD_VS_RESISTIVITY, m_textCtrlPlatingResistivity->GetValue() );
+ aCfg->Write( KEYWORD_VS_PERMITTIVITY, m_textCtrlPlatingPermittivity->GetValue() );
+ aCfg->Write( KEYWORD_VS_TEMP_DIFF, m_textCtrlTemperatureDiff->GetValue() );
+ aCfg->Write( KEYWORD_VS_PULSE_RISE_TIME, m_textCtrlRiseTime->GetValue() );
+}
+
+void PCB_CALCULATOR_FRAME::OnViaCalculate( wxCommandEvent& event )
+{
+ // Load parameters
+ double finishedHoleDia = std::abs( DoubleFromString( m_textCtrlHoleDia->GetValue() ) );
+ double platingThickness = std::abs( DoubleFromString( m_textCtrlPlatingThickness->GetValue() ) );
+ double viaLength = std::abs( DoubleFromString( m_textCtrlViaLength->GetValue() ) );
+ double padDia = std::abs( DoubleFromString( m_textCtrlViaPadDia->GetValue() ) );
+ double clearanceDia = std::abs( DoubleFromString( m_textCtrlClearanceDia->GetValue() ) );
+ double pcbThickness = std::abs( DoubleFromString( m_textCtrlBoardThickness->GetValue() ) );
+ double charImpedance = std::abs( DoubleFromString( m_textCtrlImpedance->GetValue() ) );
+ double appliedCurrent = std::abs( DoubleFromString( m_textCtrlAppliedCurrent->GetValue() ) );
+ double platingResistivity = std::abs( DoubleFromString( m_textCtrlPlatingResistivity->GetValue() ) );
+ double relativePermitivity = std::abs( DoubleFromString( m_textCtrlPlatingPermittivity->GetValue() ) );
+ double temperatureDiff = std::abs( DoubleFromString( m_textCtrlTemperatureDiff->GetValue() ) );
+ double pulseRiseTime = std::abs( DoubleFromString( m_textCtrlRiseTime->GetValue() ) );
+
+ // Normalize units
+ finishedHoleDia *= m_choiceHoleDia->GetUnitScale();
+ platingThickness *= m_choicePlatingThickness->GetUnitScale();
+ viaLength *= m_choiceViaLength->GetUnitScale();
+ padDia *= m_choiceViaPadDia->GetUnitScale();
+ clearanceDia *= m_choiceClearanceDia->GetUnitScale();
+ pcbThickness *= m_choiceBoardThickness->GetUnitScale();
+ charImpedance *= m_choiceImpedance->GetUnitScale();
+ platingResistivity = platingResistivity / 100; // Ohm-cm to Ohm-m
+
+ // Calculate cross-sectional area of the via's cylindrical structure [3]
+ double area = M_PI * (finishedHoleDia + platingThickness) * platingThickness; // m^2
+
+ double viaResistance = platingResistivity * viaLength / area; // Ohms
+
+ // Using thermal resistivity value 2.49e-3 meter-Kelvin/Watt, equivalent to
+ // thermal conductivity of 401 Watt/(meter-Kelvin) [5][6]
+ const double thermalResistivity = 2.49e-3; // m K/W
+ double thermalResistance = thermalResistivity * viaLength / area; // deg C/W
+
+ double voltageDrop = appliedCurrent * viaResistance;
+
+ double powerLoss = appliedCurrent * voltageDrop;
+
+ // Estimate current carrying capacity of the via
+ // See comment #17 in [1] for a brief discussion on the formula
+ // This formula from IPC-2221 [4] is also used in the Track Width calculator
+ area /= pow( UNIT_MIL, 2 ); // m^2 to mil^2
+ const double k = 0.048;
+ const double b = 0.44;
+ const double c = 0.725;
+ double estimatedAmpacity = k * pow( temperatureDiff, b ) * pow( area, c );
+
+ // Equation 7.6 in [7]
+ double capacitance = 55.51 * relativePermitivity * viaLength * padDia;
+ capacitance /= clearanceDia - padDia;
+
+ // Equation 7.8 in [7]
+ double timeDegradation = 2.2 * capacitance * charImpedance / 2;
+
+ // Equation 7.9 in [7]
+ double inductance = 200 * viaLength;
+ inductance *= log( 4 * viaLength / finishedHoleDia ) + 1;
+
+ // Equation 7.11 in [7]
+ double reactance = M_PI * inductance / pulseRiseTime;
+
+ // Update the display
+ VSDisplayValues( viaResistance, voltageDrop, powerLoss, estimatedAmpacity,
+ thermalResistance, capacitance, timeDegradation, inductance, reactance );
+}
+
+void PCB_CALCULATOR_FRAME::VSDisplayValues( double aViaResistance, double aVoltageDrop,
+ double aPowerLoss, double aEstimatedAmpacity, double aThermalResistance,
+ double aCapacitance, double aTimeDegradation, double aInductance, double aReactance )
+{
+ wxString msg;
+
+ msg.Printf( wxT( "%g" ), aViaResistance );
+ m_ViaResistance->SetLabel( msg );
+
+ msg.Printf( wxT( "%g" ), aVoltageDrop );
+ m_ViaVoltageDrop->SetLabel( msg );
+
+ msg.Printf( wxT( "%g" ), aPowerLoss );
+ m_ViaPowerLoss->SetLabel( msg );
+
+ msg.Printf( wxT( "%g" ), aEstimatedAmpacity );
+ m_ViaAmpacity->SetLabel( msg );
+
+ msg.Printf( wxT( "%g" ), aThermalResistance );
+ m_ViaThermalResistance->SetLabel( msg );
+
+ msg.Printf( wxT( "%g" ), aCapacitance );
+ m_ViaCapacitance->SetLabel( msg );
+
+ msg.Printf( wxT( "%g" ), aTimeDegradation );
+ m_RiseTimeOutput->SetLabel( msg );
+
+ msg.Printf( wxT( "%g" ), aInductance );
+ m_Inductance->SetLabel( msg );
+
+ msg.Printf( wxT( "%g" ), aReactance );
+ m_Reactance->SetLabel( msg );
+}