From 54c42322ef9795bb3bc8ed49dc4ca846eb536273 Mon Sep 17 00:00:00 2001 From: ferricles Date: Sat, 21 May 2022 19:29:30 -0700 Subject: [PATCH 01/24] temp --- builder/index.html | 127 ++++++++++++++++++++++++++------------------- css/sq2bs.css | 6 ++- js/sq2bs.js | 21 ++++++++ 3 files changed, 100 insertions(+), 54 deletions(-) diff --git a/builder/index.html b/builder/index.html index 270d7ba..b55614c 100644 --- a/builder/index.html +++ b/builder/index.html @@ -74,10 +74,10 @@
- +
- +
@@ -101,10 +101,10 @@
- +
- +
@@ -128,10 +128,10 @@
- +
- +
@@ -155,7 +155,7 @@
- +
@@ -181,10 +181,10 @@
- +
- +
@@ -208,7 +208,7 @@
- +
@@ -235,10 +235,10 @@
- +
- +
@@ -262,7 +262,7 @@
- +
@@ -288,10 +288,10 @@
- +
- +
@@ -302,21 +302,42 @@
-
+
+
+
+ base dps: 0 +
+
+ 0 +
+
+
+
+
+
+ +
+
+ +
+
+
+ +
Level:
- +
- +
- +
@@ -456,7 +477,7 @@
- +
@@ -480,7 +501,7 @@
- +
@@ -504,7 +525,7 @@
- +
@@ -528,7 +549,7 @@
- +
@@ -552,7 +573,7 @@
- +
@@ -576,7 +597,7 @@
- +
@@ -600,7 +621,7 @@
- +
@@ -618,7 +639,7 @@ Spell Damage %:
- +
Original Value: 0 @@ -629,7 +650,7 @@ Spell Damage Raw:
- +
Original Value: 0 @@ -640,7 +661,7 @@ Melee Damage %:
- +
Original Value: 0 @@ -651,7 +672,7 @@ Melee Damage Raw:
- +
Original Value: 0 @@ -664,7 +685,7 @@ Poison:
- +
Original Value: 0 @@ -675,7 +696,7 @@ Damage %:
- +
Original Value: 0 @@ -686,7 +707,7 @@ Damage %:
- +
Original Value: 0 @@ -697,7 +718,7 @@ Damage %:
- +
Original Value: 0 @@ -710,7 +731,7 @@ Damage %:
- +
Original Value: 0 @@ -721,7 +742,7 @@ Damage %:
- +
Original Value: 0 @@ -732,7 +753,7 @@ + Tier:
- +
Original Value: 0 @@ -751,7 +772,7 @@ Defense %:
- +
Original Value: 0 @@ -762,7 +783,7 @@ Defense %:
- +
Original Value: 0 @@ -773,7 +794,7 @@ Defense %:
- +
Original Value: 0 @@ -784,7 +805,7 @@ Defense %:
- +
Original Value: 0 @@ -797,7 +818,7 @@ Defense %:
- +
Original Value: 0 @@ -808,7 +829,7 @@ Health Regen Raw:
- +
Original Value: 0 @@ -819,7 +840,7 @@ Health Regen %:
- +
Original Value: 0 @@ -830,7 +851,7 @@ Health Bonus:
- +
Original Value: 0 @@ -846,7 +867,7 @@ 1st Spell Cost %:
- +
Original Value: 0 @@ -857,7 +878,7 @@ 2nd Spell Cost %:
- +
Original Value: 0 @@ -868,7 +889,7 @@ 3rd Spell Cost %:
- +
Original Value: 0 @@ -879,7 +900,7 @@ 4th Spell Cost %:
- +
Original Value: 0 @@ -892,7 +913,7 @@ 1st Spell Cost Raw:
- +
Original Value: 0 @@ -903,7 +924,7 @@ 2nd Spell Cost Raw:
- +
Original Value: 0 @@ -914,7 +935,7 @@ 3rd Spell Cost Raw:
- +
Original Value: 0 @@ -925,7 +946,7 @@ 4th Spell Cost Raw:
- +
Original Value: 0 diff --git a/css/sq2bs.css b/css/sq2bs.css index 87c7514..5429cd0 100644 --- a/css/sq2bs.css +++ b/css/sq2bs.css @@ -336,6 +336,10 @@ input.equipment-input { background-color: hsl(0, 0%, 16%) !important; } +.dark-10 { + background-color: hsl(0, 0%, 20%) !important; +} + .dark-1u { background-color: hsl(0, 0%, 5%); } @@ -407,4 +411,4 @@ input[type=number]::-webkit-outer-spin-button { -webkit-appearance: none; -moz-appearance: none; appearance: none; -} \ No newline at end of file +} diff --git a/js/sq2bs.js b/js/sq2bs.js index 50675c8..1b508e8 100644 --- a/js/sq2bs.js +++ b/js/sq2bs.js @@ -113,6 +113,27 @@ function doSearchSchedule(){ }, 500); } +function sq2ResetFields(){ + for (let i in powderInputs) { + setValue(powderInputs[i], ""); + } + for (let i in equipmentInputs) { + setValue(equipmentInputs[i], ""); + } + + for (let i in tomeInputs) { + setValue(tomeInputs[i], ""); + } + setValue("str-skp", "0"); + setValue("dex-skp", "0"); + setValue("int-skp", "0"); + setValue("def-skp", "0"); + setValue("agi-skp", "0"); + setValue("level-choice", "106"); + location.hash = ""; + calculateBuild(); +} + // equipment field dynamic styling function update_field(field) { // built on the assumption of no one will type in CI/CR letter by letter From ae6c0c7541e8b4d3d23b6f7ff55d93c08bb2db84 Mon Sep 17 00:00:00 2001 From: ferricles Date: Sat, 21 May 2022 22:58:04 -0700 Subject: [PATCH 02/24] reset button/margin fix on item dropdowns --- builder/index.html | 19 +++++++++---------- js/sq2display.js | 5 +++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/builder/index.html b/builder/index.html index 66df748..2513698 100644 --- a/builder/index.html +++ b/builder/index.html @@ -184,7 +184,7 @@
- +
@@ -299,25 +299,24 @@
-
- -
-
-
+
Level:
-
-
- + +
+
+
+
+
- +
diff --git a/js/sq2display.js b/js/sq2display.js index b6b588b..471072f 100644 --- a/js/sq2display.js +++ b/js/sq2display.js @@ -498,7 +498,8 @@ function displaysq2ExpandedItem(item, parent_id){ base_dps_elem.textContent = "Base DPS: "+base_dps_min.toFixed(3)+"\u279c"+base_dps_max.toFixed(3); } else { - base_dps_elem.textContent = "Base DPS: "+(total_damages * damage_mult); + let bdps = total_damages * damage_mult; + base_dps_elem.textContent = "Base DPS: " + (bdps ? bdps : 0); } parent_div.appendChild(document.createElement("p")); parent_div.appendChild(base_dps_elem); @@ -588,7 +589,7 @@ function displaysq2WeaponStats(build) { tot /= 2; let dps = Math.max(0, Math.round(tot * baseDamageMultiplier[attackSpeeds.indexOf(item.get("atkSpd"))] )); //atkspeeds - document.getElementById("weapon-dps").textContent = "base dps: " + dps; + document.getElementById("weapon-dps").textContent = "base dps: " + (isNaN(dps) ? 0 : dps); document.getElementById("weapon-lv").textContent = item.get("lvl"); if (item.get("type")) { From 09d38f3d2da37b23f501a930c12b8d4cc8f6e218 Mon Sep 17 00:00:00 2001 From: ferricles Date: Sat, 21 May 2022 23:07:59 -0700 Subject: [PATCH 03/24] no more row col shenanigans --- builder/index.html | 97 +++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 53 deletions(-) diff --git a/builder/index.html b/builder/index.html index 2513698..ae7fd0f 100644 --- a/builder/index.html +++ b/builder/index.html @@ -1271,62 +1271,53 @@
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-

Made by hppeng and ferricles with Atlas Inc (JavaScript required to function, nothing works without js)

-

Hard refresh the page (Ctrl+Shift+R on windows/chrome) if it isn't updating correctly.

-
- -
+
+
+
+

Made by hppeng and ferricles with Atlas Inc (JavaScript required to function, nothing works without js)

+

Hard refresh the page (Ctrl+Shift+R on windows/chrome) if it isn't updating correctly.

-
+ +
-
-
melee
+
+
melee
-
-
poison
+
+
poison
-
-
spell1
- +
+
spell1
+
-
-
spell2
- +
+
spell2
+
-
-
spell3
- +
+
spell3
+
-
-
spell4
- +
+
spell4
+
-
-
+
+
diff --git a/js/sq2display.js b/js/sq2display.js index b6b588b..7043e8e 100644 --- a/js/sq2display.js +++ b/js/sq2display.js @@ -1411,6 +1411,43 @@ function displaysq2SpellDamage(parent_elem, overallparent_elem, build, spell, sp part_divavg.append(overallaverageLabel); } } + + //up and down arrow - done ugly + + + + let down_arrow = document.createElement("img"); + down_arrow.id = "down_arrow_" + overallparent_elem.id; + down_arrow.style.maxWidth = document.body.clientWidth > 900 ? "3rem" : "10rem"; + down_arrow.src = "../media/icons/" + (newIcons ? "new" : "old") + "/toggle_down.png"; + overallparent_elem.appendChild(down_arrow); + + let up_arrow = document.createElement("img"); + up_arrow.id = "up_arrow_" + overallparent_elem.id; + up_arrow.style.maxWidth = document.body.clientWidth > 900 ? "3rem" : "10rem"; + up_arrow.src = "../media/icons/" + (newIcons ? "new" : "old") + "/toggle_up.png"; + up_arrow.style.display = "none"; + overallparent_elem.appendChild(up_arrow); + + overallparent_elem.setAttribute("onclick", overallparent_elem.getAttribute("onclick") + `;toggleUpDownArrow("${overallparent_elem.id}")`); +} + +function toggleUpDownArrow(parent_id) { + parent_elem = document.getElementById(parent_id); + if (parent_elem) { + let down_arrow = document.getElementById("down_arrow_" + parent_id); + if (down_arrow.style.display === "none") { + down_arrow.style.display = ""; + } else { + down_arrow.style.display = "none"; + } + let up_arrow = document.getElementById("up_arrow_" + parent_id); + if (up_arrow.style.display === "none") { + up_arrow.style.display = ""; + } else { + up_arrow.style.display = "none"; + } + } } function displaysq2EquipOrder(parent_elem, buildOrder){ diff --git a/media/icons/new/toggle_down.png b/media/icons/new/toggle_down.png new file mode 100644 index 0000000000000000000000000000000000000000..4154d3dfdd23fbaf463e792dd232f9bf05b761b7 GIT binary patch literal 834 zcmV-I1HJr-P)Px%{7FPXRCt{2)JvA*FbqRcWPw?27T7(glPfK1l9?qdPAC_?}dZS~u(0&G!+0Gu7^w8I71q6`7dcBR8E6<~`p z1aOyLz16J%Ta+Py-bQrQkOFK`h5*hQ-A}^{utgaH*m7ql-CBSx$`HWYtR9+HfGx@p zsK=puEDEqi83K8^_07Msar-feG6XVk>=x;#Usemo`G;r!1AuK&I%Km@qC5n^T#j9_ z)f0zG#PNX=WeCjT*a=7a;B;{~K3t*-efEb4H*j|jJ6|AR}e%a&p+967k&L9`nP^|NaT0xEFLxfDC= zVSjv$Ye*so1oOD&S;~{?6pvWr8lEh{!5FT&m2ze`-GkP+hALyAaGYyCrTiI9{kS!* zVapyg{LeLqQmrhOdFUF~5LOCcCFIRd*@rI?PK-dVyfK6ogcetjpEwxE2EvRz$Vp5L z=K$A`O9Xue*F2Dg{TS3quHlzBfRSAH&d$$aXdSp7g~Va>;JROSdmRJp%=K6#4rVWQ zSO>!#h(n5lUDd>3Z^D83VJBe76L5I*FnhEZ_+%X9c+41|Fnlwv#~STWUFRspn`LG! z!kFt3yB@IXyd>Y5RmW0-a6RtXhwVBSY5r`mjRghddh~Z4yzBcVN-r9g6CLBT0*Wk~7a3_^p;W|bkO zhpPw>x*A=ElpcB_OcPx%<4Ht8RCt{2)InC;KoA7b=75}*115_A$s?9!TN+Kx%>TPUu%+(mdMoJQUv1pkS%ToqE`*^Qy|7 z+3GAMOzIJjcEG7~tQv2YGqZ@!9BO-J%ofA%z(Mw7_WaAhFXHg>*a?Q*kOLcsU9HJr zPv(%uXNT)B%o8}6xux#cZjUp-7o{FWmBVN$b?+)V^VWlHD`9GdZEdizwl;y#B+|$194`NBs zo;$m(%a>aQ^yB{iy6g)L9rCPxmrcK9_2I%uR=n5KKX}CUkD?6!q0V+M< zRjvD}NdYQ7;A}0r>a+q>dcalA>a9ZssPur|j&#`51*r6ZWY2WkLj|bxfD!HW+hzeO nJzyrcy6(FG6&|pPuipC&A#A~L#C|)I00000NkvXXu0mjfx^j(4 literal 0 HcmV?d00001 diff --git a/media/icons/old/toggle_down.png b/media/icons/old/toggle_down.png new file mode 100644 index 0000000000000000000000000000000000000000..4154d3dfdd23fbaf463e792dd232f9bf05b761b7 GIT binary patch literal 834 zcmV-I1HJr-P)Px%{7FPXRCt{2)JvA*FbqRcWPw?27T7(glPfK1l9?qdPAC_?}dZS~u(0&G!+0Gu7^w8I71q6`7dcBR8E6<~`p z1aOyLz16J%Ta+Py-bQrQkOFK`h5*hQ-A}^{utgaH*m7ql-CBSx$`HWYtR9+HfGx@p zsK=puEDEqi83K8^_07Msar-feG6XVk>=x;#Usemo`G;r!1AuK&I%Km@qC5n^T#j9_ z)f0zG#PNX=WeCjT*a=7a;B;{~K3t*-efEb4H*j|jJ6|AR}e%a&p+967k&L9`nP^|NaT0xEFLxfDC= zVSjv$Ye*so1oOD&S;~{?6pvWr8lEh{!5FT&m2ze`-GkP+hALyAaGYyCrTiI9{kS!* zVapyg{LeLqQmrhOdFUF~5LOCcCFIRd*@rI?PK-dVyfK6ogcetjpEwxE2EvRz$Vp5L z=K$A`O9Xue*F2Dg{TS3quHlzBfRSAH&d$$aXdSp7g~Va>;JROSdmRJp%=K6#4rVWQ zSO>!#h(n5lUDd>3Z^D83VJBe76L5I*FnhEZ_+%X9c+41|Fnlwv#~STWUFRspn`LG! z!kFt3yB@IXyd>Y5RmW0-a6RtXhwVBSY5r`mjRghddh~Z4yzBcVN-r9g6CLBT0*Wk~7a3_^p;W|bkO zhpPw>x*A=ElpcB_OcPx%<4Ht8RCt{2)InC;KoA7b=75}*115_A$s?9!TN+Kx%>TPUu%+(mdMoJQUv1pkS%ToqE`*^Qy|7 z+3GAMOzIJjcEG7~tQv2YGqZ@!9BO-J%ofA%z(Mw7_WaAhFXHg>*a?Q*kOLcsU9HJr zPv(%uXNT)B%o8}6xux#cZjUp-7o{FWmBVN$b?+)V^VWlHD`9GdZEdizwl;y#B+|$194`NBs zo;$m(%a>aQ^yB{iy6g)L9rCPxmrcK9_2I%uR=n5KKX}CUkD?6!q0V+M< zRjvD}NdYQ7;A}0r>a+q>dcalA>a9ZssPur|j&#`51*r6ZWY2WkLj|bxfD!HW+hzeO nJzyrcy6(FG6&|pPuipC&A#A~L#C|)I00000NkvXXu0mjfx^j(4 literal 0 HcmV?d00001 From e46ea31ba5e6e18a8b9c0418784c8d156efb869d Mon Sep 17 00:00:00 2001 From: ferricles Date: Sun, 22 May 2022 01:10:55 -0700 Subject: [PATCH 05/24] refactored changes to more appropriate places --- js/sq2bs.js | 7 +++++++ js/sq2display.js | 40 +++++----------------------------------- 2 files changed, 12 insertions(+), 35 deletions(-) diff --git a/js/sq2bs.js b/js/sq2bs.js index 25ac2d2..268ca34 100644 --- a/js/sq2bs.js +++ b/js/sq2bs.js @@ -236,6 +236,13 @@ function toggle_spell_tab(tab) { } else { document.querySelector("#"+tab).style.display = "none"; } + + let arrow_img = document.querySelector("#" + "arrow_" + tab + "Avg"); + if (arrow_img.src.includes("down")) { + arrow_img.src = arrow_img.src.replace("down", "up"); + } else { + arrow_img.src = arrow_img.src.replace("up", "down"); + } } function toggle_boost_tab(tab) { diff --git a/js/sq2display.js b/js/sq2display.js index 7043e8e..4977740 100644 --- a/js/sq2display.js +++ b/js/sq2display.js @@ -1413,41 +1413,11 @@ function displaysq2SpellDamage(parent_elem, overallparent_elem, build, spell, sp } //up and down arrow - done ugly - - - - let down_arrow = document.createElement("img"); - down_arrow.id = "down_arrow_" + overallparent_elem.id; - down_arrow.style.maxWidth = document.body.clientWidth > 900 ? "3rem" : "10rem"; - down_arrow.src = "../media/icons/" + (newIcons ? "new" : "old") + "/toggle_down.png"; - overallparent_elem.appendChild(down_arrow); - - let up_arrow = document.createElement("img"); - up_arrow.id = "up_arrow_" + overallparent_elem.id; - up_arrow.style.maxWidth = document.body.clientWidth > 900 ? "3rem" : "10rem"; - up_arrow.src = "../media/icons/" + (newIcons ? "new" : "old") + "/toggle_up.png"; - up_arrow.style.display = "none"; - overallparent_elem.appendChild(up_arrow); - - overallparent_elem.setAttribute("onclick", overallparent_elem.getAttribute("onclick") + `;toggleUpDownArrow("${overallparent_elem.id}")`); -} - -function toggleUpDownArrow(parent_id) { - parent_elem = document.getElementById(parent_id); - if (parent_elem) { - let down_arrow = document.getElementById("down_arrow_" + parent_id); - if (down_arrow.style.display === "none") { - down_arrow.style.display = ""; - } else { - down_arrow.style.display = "none"; - } - let up_arrow = document.getElementById("up_arrow_" + parent_id); - if (up_arrow.style.display === "none") { - up_arrow.style.display = ""; - } else { - up_arrow.style.display = "none"; - } - } + let arrow = document.createElement("img"); + arrow.id = "arrow_" + overallparent_elem.id; + arrow.style.maxWidth = document.body.clientWidth > 900 ? "3rem" : "10rem"; + arrow.src = "../media/icons/" + (newIcons ? "new" : "old") + "/toggle_down.png"; + overallparent_elem.appendChild(arrow); } function displaysq2EquipOrder(parent_elem, buildOrder){ From 20fe476f32a8a10568eb4b7c7bd57358753bbb33 Mon Sep 17 00:00:00 2001 From: ferricles Date: Sun, 22 May 2022 01:20:07 -0700 Subject: [PATCH 06/24] more code cleanup --- js/sq2bs.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/js/sq2bs.js b/js/sq2bs.js index 268ca34..460fcd1 100644 --- a/js/sq2bs.js +++ b/js/sq2bs.js @@ -231,16 +231,12 @@ function show_tab(tab) { } function toggle_spell_tab(tab) { + let arrow_img = document.querySelector("#" + "arrow_" + tab + "Avg"); if (document.querySelector("#"+tab).style.display == "none") { document.querySelector("#"+tab).style.display = ""; - } else { - document.querySelector("#"+tab).style.display = "none"; - } - - let arrow_img = document.querySelector("#" + "arrow_" + tab + "Avg"); - if (arrow_img.src.includes("down")) { arrow_img.src = arrow_img.src.replace("down", "up"); } else { + document.querySelector("#"+tab).style.display = "none"; arrow_img.src = arrow_img.src.replace("up", "down"); } } From 2955c13d0d28938e39945698beb80fe2248fbdf7 Mon Sep 17 00:00:00 2001 From: reschan Date: Sun, 22 May 2022 20:36:03 +0700 Subject: [PATCH 07/24] fix: re-align rows and cols correctly --- builder/index.html | 2166 ++++++++++++++++++++++---------------------- 1 file changed, 1084 insertions(+), 1082 deletions(-) diff --git a/builder/index.html b/builder/index.html index 5a2ad07..5548a6c 100644 --- a/builder/index.html +++ b/builder/index.html @@ -49,1168 +49,1166 @@ Swap Icon Style
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- 0 -
-
- 0 -
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ 0 +
+
+ 0
-
-
-
- -
-
- -
+
+
+
+
+ +
+
+
-
-
-
- -
-
-
-
- 0 -
-
- 0 -
+
+
+
+
+ +
+
+
+
+ 0 +
+
+ 0
-
-
-
- -
-
- -
+
+
+
+
+ +
+
+
-
-
-
- -
-
-
-
- 0 -
-
- 0 -
+
+
+
+
+ +
+
+
+
+ 0 +
+
+ 0
-
-
-
- -
-
- -
+
+
+
+
+ +
+
+
-
-
-
- -
-
-
-
- 0 -
-
- 0 -
+
+
+
+
+ +
+
+
+
+ 0 +
+
+ 0
-
-
-
- -
-
-
+
+
+
+
+ +
+
-
-
-
- -
-
-
-
- 0 -
-
- 0 -
+
+
+
+
+ +
+
+
+
+ 0 +
+
+ 0
-
-
-
- -
-
- -
+
+
+
+
+ +
+
+
-
-
-
- -
-
-
-
- 0 -
-
- 0 -
+
+
+
+
+ +
+
+
+
+ 0 +
+
+ 0
-
-
-
- -
-
- -
+
+
+
+
+ +
+
+
-
-
-
- -
-
-
-
- 0 -
-
- 0 -
+
+
+
+
+ +
+
+
+
+ 0 +
+
+ 0
-
-
-
- -
-
- -
+
+
+
+
+ +
+
+
-
-
-
- -
-
-
-
- 0 -
-
- 0 -
+
+
+
+
+ +
+
+
+
+ 0 +
+
+ 0
-
-
-
- -
-
-
+
+
+
+
+ +
+
-
-
-
- -
-
-
-
- base dps: 0 -
-
- 0 -
+
+
+
+
+ +
+
+
+
+ base dps: 0 +
+
+ 0
-
-
-
- -
-
- -
+
+
+
+
+ +
+
+
-
-
-
-
-
- Level: -
-
- -
-
- -
+
+
+
+
+
+
+ Level:
-
-
- -
-
- -
+
+ +
+
+ +
+
+
+
+ +
+
+
-
-
-
-
-
-
- - -
- Assign: 0 -
-
- Original: 0 -
-
-
+
+
+
+
+
+
+
+ + +
+ Assign: 0
-
-
-
- - -
- Assign: 0 -
-
- Original: 0 -
-
-
+
+ Original: 0
-
-
-
- - -
- Assign: 0 -
-
- Original: 0 -
-
-
+
-
-
- - -
- Assign: 0 -
-
- Original: 0 -
-
-
-
-
-
-
- - -
- Assign: 0 -
-
- Original: 0 -
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
+
+
+ + +
+ Assign: 0 +
+
+ Original: 0 +
+
+
+
+
+
+
+ + +
+ Assign: 0 +
+
+ Original: 0 +
+
+
+
+
+
+
+ + +
+ Assign: 0 +
+
+ Original: 0 +
+
+
+
+
+
+
+ + +
+ Assign: 0 +
+
+ Original: 0 +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
- -
-
- -
-
- -
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
-