From df22765dc167c3f049e2ee3153c026d581aba9ad Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Mon, 15 May 2023 05:07:07 -0500 Subject: [PATCH 01/22] Create resistor.js --- apps/rescalc/resistor.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/rescalc/resistor.js diff --git a/apps/rescalc/resistor.js b/apps/rescalc/resistor.js new file mode 100644 index 000000000..1e10c5ccc --- /dev/null +++ b/apps/rescalc/resistor.js @@ -0,0 +1 @@ +// TODO: Add image data From 32c27fb918c1269cec7d685318e26c26c86bb678 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Mon, 15 May 2023 05:11:15 -0500 Subject: [PATCH 02/22] Add files via upload --- apps/rescalc/app-icon.js | 1 + apps/rescalc/app.js | 511 ++++++++++++++++++++++++++++++++++ apps/rescalc/icon.png | Bin 0 -> 3639 bytes apps/rescalc/metadata.json | 12 + apps/rescalc/readme.md | 25 ++ apps/rescalc/rescalc.app.img | 1 + apps/rescalc/rescalc.img | Bin 0 -> 2308 bytes apps/rescalc/screenshot-1.png | Bin 0 -> 3115 bytes apps/rescalc/screenshot-2.png | Bin 0 -> 2984 bytes apps/rescalc/screenshot.png | Bin 0 -> 3025 bytes 10 files changed, 550 insertions(+) create mode 100644 apps/rescalc/app-icon.js create mode 100644 apps/rescalc/app.js create mode 100644 apps/rescalc/icon.png create mode 100644 apps/rescalc/metadata.json create mode 100644 apps/rescalc/readme.md create mode 100644 apps/rescalc/rescalc.app.img create mode 100644 apps/rescalc/rescalc.img create mode 100644 apps/rescalc/screenshot-1.png create mode 100644 apps/rescalc/screenshot-2.png create mode 100644 apps/rescalc/screenshot.png diff --git a/apps/rescalc/app-icon.js b/apps/rescalc/app-icon.js new file mode 100644 index 000000000..4ce5b3348 --- /dev/null +++ b/apps/rescalc/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+64A/AAWsq9Wlksq1X1gtllZ4BlVOqlUp0qA4MrLUIkBqnMAAfV6nU6XMqgNBMjuBgFOFogAB5vN6nVGYPMp0AwIuamUA4wuGGgwxB40Aqy5aFA+ivF40QIEMgPMYrFXFw9+dIT1CvxiFGANXdSwuGWYLkEB4LLEGAb0UgF4Fw73CL4LnCvSTE6nUvARCACGBLw5NCRYK/BAYITBp4QEMAQ8CLy8qmT3BkgIDkjnB2YRESIJgTLxC4C6QID6RoDMA6ORKYgABJQVWc4jICqx0GYIMkSCErRw14QoMHvwKFv0HCo3NeIIVBRx+iKg0s68BBQ2igPXlhqF6uiSCC+HqhfCF5MrqjAXF46/CEgxqDX4ovUKgvGF4WsHY0A1gvC4xqFF68AlbZCgJVEvCOBNQMrHYnUvwvQqzZEI4uCEgkAwRHH5vUp1WF56EGgEAkgCBgF+BQZTBBggWF1ovPSA94AAQJFNgILDXy1WJgQADD4oAKzgYGSBoPB1gDBikUgGBGIXGFhPGvAPBq8Ar1eLwT4BF5gDCg2Ox0GAoIxCkgAIBYOBCIMB2ezDwZRCABGBlYQDjUaIYiaBh8HE4I3BklsQgsAslkgHWCwSRKF4fRgETicA6IMFroPCleAAQJdC6/QgE6nUA6Avbg+PmYvDufIkgvVwNWlYvMgNlh4vDtm6F5qdBBwafCBAIvmFIIPClZnCR5ovWE4RYBLwSVGF5VrX4ls3a/RFgQvD1gYCF5B2BmcHgGBwMAklsQIIvWGAIvGLoSkBZoIAHBYJICF4wKDF5DEDgEZjMA1ghEABI9CAQNlsojCOoIPDF44wBDAIAEFpgxGAAoNEQ4TvHAEgv/AD7+DF9bvIF/4v/F/4vpwIvrFlgAE")) \ No newline at end of file diff --git a/apps/rescalc/app.js b/apps/rescalc/app.js new file mode 100644 index 000000000..3a149506e --- /dev/null +++ b/apps/rescalc/app.js @@ -0,0 +1,511 @@ +// Capital Omega symbol and Resistor icon from icons8 +// https://icons8.com/icon/szAc6YFQmlym/capital-omega +// https://icons8.com/icon/ISAVBnskZod0/resistor + +let colorData = { + black: { + value: 0, + multiplier: Math.pow(10, 0), + hex: '#000' + }, + brown: { + value: 1, + multiplier: Math.pow(10, 1), + tolerance: 1, + hex: '#8B4513' + }, + red: { + value: 2, + multiplier: Math.pow(10, 2), + tolerance: 2, + hex: '#f00' + }, + orange: { + value: 3, + multiplier: Math.pow(10, 3), + hex: '#FF9900' + }, + yellow: { + value: 4, + multiplier: Math.pow(10, 4), + hex: '#ff0' + }, + green: { + value: 5, + multiplier: Math.pow(10, 5), + tolerance: 0.5, + hex: '#0f0' + }, + blue: { + value: 6, + multiplier: Math.pow(10, 6), + tolerance: 0.25, + hex: '#00f' + }, + violet: { + value: 7, + multiplier: Math.pow(10, 7), + tolerance: 0.1, + hex: '#f0f' + }, + grey: { + value: 8, + multiplier: Math.pow(10, 8), + tolerance: 0.05, + hex: '#808080' + }, + white: { + value: 9, + multiplier: Math.pow(10, 9), + hex: '#fff' + }, + gold: { + multiplier: Math.pow(10, -1), + tolerance: 5, + hex: '#FFD700' + }, + silver: { + multiplier: Math.pow(10, -2), + tolerance: 10, + hex: '#C0C0C0' + }, + none: { + tolerance: 20 + }, +}; + +function clearScreen() { // Except Back Button + g.clearRect(24, 0, 176, 24); + g.clearRect(0, 24, 176, 176); +} + +function colorBandsToResistance(colorBands) { + let firstBand = colorBands[0]; + let secondBand = colorBands[1]; + let multiplierBand = colorBands[2]; + let toleranceBand = colorBands[3]; + let significantDigits = colorData[firstBand].value * 10 + colorData[secondBand].value; + let multiplier = colorData[multiplierBand].multiplier; + let resistance = significantDigits * multiplier; + let tolerance = colorData[toleranceBand].tolerance; + return [resistance, tolerance]; +} + +function log10(val) { + return Math.log(val) / Math.log(10); +} + +function resistanceToColorBands(resistance, tolerance) { + let multiplier = Math.floor(log10(resistance)); + let firstDigit = Math.floor(resistance / Math.pow(10, multiplier)); + resistance -= firstDigit * Math.pow(10, multiplier); + multiplier--; // for the next digit + let secondDigit = Math.floor(resistance / Math.pow(10, multiplier)); + resistance -= secondDigit * Math.pow(10, multiplier); + console.log("First Digit: " + firstDigit); + console.log("Second Digit: " + secondDigit); + console.log("Multiplier: " + multiplier); + let firstBandEntry = Object.entries(colorData).find(function(entry) { + return entry[1].value === firstDigit; + }); + let firstBand = firstBandEntry ? firstBandEntry[1].hex : undefined; + let secondBandEntry = Object.entries(colorData).find(function(entry) { + return entry[1].value === secondDigit; + }); + let secondBand = secondBandEntry ? secondBandEntry[1].hex : undefined; + let multiplierBandEntry = Object.entries(colorData).find(function(entry) { + return entry[1].multiplier === Math.pow(10, multiplier); + }); + let multiplierBand = multiplierBandEntry ? multiplierBandEntry[1].hex : undefined; + let toleranceBandEntry = Object.entries(colorData).find(function(entry) { + return entry[1].tolerance === tolerance; + }); + let toleranceBand = toleranceBandEntry ? toleranceBandEntry[1].hex : undefined; + console.log("Color bands: " + [firstBand, secondBand, multiplierBand, toleranceBand]); + return [firstBand, secondBand, multiplierBand, toleranceBand]; +} + +function drawResistor(colorBands, tolerance) { + let img = require("Storage").read("rescalc.app.img"); + let resistorBodyWidth = 51; + let resistorBodyHeight = 43; + let resistorStartX = 57; + var bandColors = colorBands; + var numcolorBands = bandColors.length; + var resistorStartY = ((g.getHeight() - resistorBodyHeight) / 2) + 48; + clearScreen(); + g.drawImage(img, 0, 48); + var bandWidth = (resistorBodyWidth - (numcolorBands * 2 - 1)) / numcolorBands; // width of each band, accounting for the spacing + var bandHeight = resistorBodyHeight; // height of each band + var currentX = resistorStartX; // starting point for the first band + // Define the tolerance values that will trigger the fourth band + var validTolerances = [1, 2, 0.5, 0.25, 0.1, 0.05, 5, 10]; + + for (var i = 0; i < numcolorBands; i++) { + // Skip the fourth band and its outlines if the tolerance is not in the valid list + if (i === 3 && !validTolerances.includes(tolerance)) continue; + + var bandX = currentX; // calculate the x-coordinate of the band + var bandY = resistorStartY; // y-coordinate of the band + + g.setColor(bandColors[i]); // set the color for the band + g.fillRect(bandX, bandY, bandX + bandWidth, bandY + bandHeight); + + // Draw band outlines + g.setColor('#000'); // set the color for the outline + g.drawLine(bandX, bandY, bandX, bandY + bandHeight); // left outline + g.drawLine(bandX + bandWidth, bandY, bandX + bandWidth, bandY + bandHeight); // right outline + + // if it's the fourth band, shift it over by an additional 6 pixels + if (i === 2) { + currentX = bandX + bandWidth + 5 + 8; // update the current X position for the next band, accounting for the spacing + } else { + currentX = bandX + bandWidth + 5; // update the current X position for the next band, accounting for the spacing + } + } +} + +function omega() { + return require("heatshrink").decompress(atob("mUywISP//AAgUB//+Aon/8AFEBgYFBDId/AoP4AoM//EH/4FBj/wBAIfBh4PBg/8gEDAQIbBFQIoCj4SBBAIPBCoM/wASDh5BCj/AgYqBCQPwgIkCgAiBDwQcCj4eCg/gAIJgC/ABBCQV+AIQrCDDMPP4QDBJQsAJQYDBMYorDDwJdDNoQSCg4eBh4CBSQSPCSQc/HAKuCg5LBv4uCBIIOCUoSnCCQQUCdYTuDbIOAAQUfeIICCboLgCPgIYLNwQAPA=")); +} + +function formatResistance(resistance) { + var units = ["", "k", "M", "G"]; + var unitIndex = 0; + while (resistance >= 1000 && unitIndex < units.length - 1) { + resistance /= 1000; + unitIndex++; + } + // Convert to string and truncate unnecessary zeroes + var resistanceStr = String(resistance); + if (resistanceStr.length > 5) { // if length is more than 5 including decimal point + resistanceStr = resistance.toFixed(2); + } + return { + value: resistanceStr, + unit: units[unitIndex] + }; +} + +function drawResistance(resistance, tolerance) { + var x = g.getWidth() / 2; + var y = 40; + var formattedResistance = formatResistance(resistance); + var resistanceStr = formattedResistance.value; + var unit = formattedResistance.unit; + g.reset(); + + // draw resistance value + g.setFontAlign(0, 0).setFont("Vector", 54); + g.clearRect(0, y - 15, g.getWidth(), y + 25); // clear the background + g.drawString(resistanceStr, x + 4, y); + + // draw unit, symbol and tolerance + y += 46; + g.setFontAlign(-1, 0).setFont("Vector", 27); + + var toleranceShift = tolerance.toString().replace('.', '').length > 2 ? 8 : 0; + var unitX = ((unit === "M" || unit === "G") ? 0 : 8) - toleranceShift; + var omegaX = (unit ? 46 : 36) - toleranceShift; // Shift the Omega symbol to the left if there is no unit + + g.drawString(unit.padStart(3), unitX, y); + + // Draw the Ohm symbol to the right of the unit + g.drawImage(omega(), omegaX, y - 13, { + scale: 0.45 + }); + + g.setFontAlign(1, 0).setFont("Vector", 27); + + // Define the tolerance values that will trigger the fourth band + var validTolerances = [1, 2, 0.5, 0.25, 0.1, 0.05, 5, 10]; + + // Check if the tolerance is not in the valid list, and if it's not, set it to 20 + if (!validTolerances.includes(tolerance)) { + tolerance = 20; + } + + var toleranceStr = "±" + tolerance + "%"; + var toleranceX = tolerance.toString().replace('.', '').length > 2 ? 10 : 14; + g.drawString(toleranceStr.padEnd(4), 176 - toleranceX, y); +} + +(function() { + let settings = { + resistance: 0, + tolerance: 0, + colorBands: ["", "", "", ""] + }; + + function resetSettings() { + let emptySettings = { + resistance: 0, + tolerance: 0, + colorBands: ["", "", "", ""] + }; + settings = emptySettings; + } + + function showColorBandMenu(bandNumber) { + let colorBandMenu = { + '': { + 'title': `Band ${bandNumber}` + }, + '< Back': function() { + E.showMenu(colorEntryMenu); + }, + }; + + // Populate colorBandMenu with colors from colorData + for (let color in colorData) { + if (bandNumber === 1 || bandNumber === 2) { + if (color !== 'none' && color !== 'gold' && color !== 'silver') { + (function(color) { + colorBandMenu[color.charAt(0).toUpperCase() + color.slice(1)] = function() { + setBandColor(bandNumber, color); + }; + })(color); + } + } else if (bandNumber === 3) { + if (color !== 'none') { + (function(color) { + colorBandMenu[color.charAt(0).toUpperCase() + color.slice(1)] = function() { + setBandColor(bandNumber, color); + }; + })(color); + } + } else if (bandNumber === 4) { + if (colorData[color].hasOwnProperty('tolerance')) { + (function(color) { + colorBandMenu[color.charAt(0).toUpperCase() + color.slice(1)] = function() { + setBandColor(bandNumber, color); + }; + })(color); + } + } + } + return E.showMenu(colorBandMenu); + } + + function setBandColor(bandNumber, color) { + settings.colorBands[bandNumber - 1] = color; // arrays are 0-indexed + console.log(`Band ${bandNumber} color set to ${color}`); + + // Update the color band in the colorEntryMenu + colorEntryMenu[`${bandNumber}:`].value = color; + + showColorEntryMenu(); + } + + function showColorEntryMenu() { + colorEntryMenu = { + '': { + 'title': 'Band Color' + }, + '< Back': function() { + clearScreen(); + E.showMenu(mainMenu); + }, + '1:': { + value: settings.colorBands[0] || "", + format: (v) => `${v}`, + onchange: () => { + clearScreen(); + setTimeout(() => showColorBandMenu(1), 5); + } + }, + '2:': { + value: settings.colorBands[1] || "", + format: (v) => `${v}`, + onchange: () => { + clearScreen(); + setTimeout(() => showColorBandMenu(2), 5); + } + }, + '3:': { + value: settings.colorBands[2] || "", + format: (v) => `${v}`, + onchange: () => { + clearScreen(); + setTimeout(() => showColorBandMenu(3), 5); + } + }, + '4:': { + value: settings.colorBands[3] || "", + format: (v) => `${v}`, + onchange: () => { + clearScreen(); + setTimeout(() => showColorBandMenu(4), 5); + } + }, + 'Draw Resistor': function() { + let colorBands = settings.colorBands; + let values = colorBandsToResistance(colorBands); + settings.resistance = values[0]; + settings.tolerance = values[1]; + showDrawingMenu(); + } + }; + + E.showMenu(colorEntryMenu); + } + + function showMultiplierMenu() { + let multiplierMenu = { + '': { + 'title': 'Multiplier' + }, + '< Back': function() { + showResistanceEntryMenu(); + } + }; + + // Generate menu items for each Multiplier value in colorData + for (let color in colorData) { + if (colorData[color].hasOwnProperty('multiplier')) { + let multiplierValue = parseFloat(colorData[color].multiplier); // Parse the multiplier as a float + let formattedMultiplier = formatMultiplier(multiplierValue); + multiplierMenu[`${formattedMultiplier}`] = () => { + settings.multiplier = multiplierValue; + console.log(`Multiplier changed to: ${settings.multiplier}`); + // Update the value of 'Multiplier' in resistanceEntryMenu + resistanceEntryMenu["Multiplier"] = function() { + showMultiplierMenu(); + }; + showResistanceEntryMenu(); + }; + } + } + + E.showMenu(multiplierMenu); + } + + // Helper function to format multiplier as exponential notation for values >= 1000 + function formatMultiplier(multiplier) { + if (multiplier >= 1000) { + let exponent = Math.log(multiplier) / Math.log(10); + return `10^${exponent}`; + } else { + return multiplier.toString(); + } + } + + function showToleranceMenu() { + let toleranceMenu = { + '': { + 'title': 'Tolerance' + }, + '< Back': function() { + showResistanceEntryMenu(); + } + }; + + // Generate menu items for each tolerance value in colorData + for (let color in colorData) { + if (colorData[color].hasOwnProperty('tolerance')) { + let tolerance = parseFloat(colorData[color].tolerance); // Parse the tolerance as a float + toleranceMenu[`${tolerance}%`] = () => { + settings.tolerance = tolerance; + console.log(settings.tolerance); + // Update the value of 'Tolerance (%)' in resistanceEntryMenu + resistanceEntryMenu["Tolerance (%)"] = function() { + showToleranceMenu(); + }; + showResistanceEntryMenu(); + }; + } + } + + E.showMenu(toleranceMenu); + } + + function drawResistorAndResistance(resistance, tolerance) { + console.log('Draw Resistor clicked'); + let colorBands = resistanceToColorBands((settings.resistance * settings.multiplier), settings.tolerance); + drawResistor(colorBands, tolerance); + drawResistance(resistance, tolerance); + resetSettings(); + } + + let resistanceEntryMenu = { + '': { + 'title': 'Resistance' + }, + '< Back': function() { + clearScreen(); + E.showMenu(mainMenu); + }, + 'Ohms': { + value: 0, + min: 0, + max: 99, + wrap: true, + format: v => '', + onchange: v => {} + }, + 'Multiplier': function() { + showMultiplierMenu(); + }, + 'Tolerance (%)': function() { + showToleranceMenu(); + }, + 'Draw Resistor': function() { + showDrawingMenu(); + } + }; + + function showResistanceEntryMenu() { + // Update the 'Ohms' field + resistanceEntryMenu['Ohms'].value = settings.resistance; + resistanceEntryMenu['Ohms'].format = v => { + let multipliedValue = v * (settings.multiplier || 1); + let formattedResistance = formatResistance(multipliedValue); + let resistanceString = `${formattedResistance.value}${formattedResistance.unit}`; + if (settings.tolerance) { + return `${resistanceString}, ± ${settings.tolerance}%`; + } else { + return v ? `${resistanceString}` : ''; + } + }; + resistanceEntryMenu['Ohms'].onchange = v => { + settings.resistance = v || 0; + console.log('Resistance changed to: ', settings.resistance); + }; + + E.showMenu(resistanceEntryMenu); + } + + function showDrawingMenu() { + let drawingMenu = { + '': { + 'title': 'Resistor Drawing' + }, + '< Back': function() { + clearScreen(); + E.showMenu(mainMenu); + }, + }; + + E.showMenu(drawingMenu); + + let resistance = settings.resistance * (settings.multiplier || 1); + let tolerance = settings.tolerance; + drawResistorAndResistance(resistance, tolerance); + } + + let mainMenu = { + '': { + 'title': 'Resistor Calc' + }, + '< Back': () => Bangle.showClock(), // return to the clock app + 'Resistance': function() { + resetSettings(); + showResistanceEntryMenu(); + }, + 'Colors': function() { + resetSettings(); + showColorEntryMenu(); + }, + }; + E.showMenu(mainMenu); +})(load); \ No newline at end of file diff --git a/apps/rescalc/icon.png b/apps/rescalc/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d858ef005467804bd18880b0fbb5ae4fee2ebbcb GIT binary patch literal 3639 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 literal 0 HcmV?d00001 diff --git a/apps/rescalc/metadata.json b/apps/rescalc/metadata.json new file mode 100644 index 000000000..64197fb8e --- /dev/null +++ b/apps/rescalc/metadata.json @@ -0,0 +1,12 @@ +{ "id": "rescalc", + "name": "Resitstor Calculator", + "shortName" : "Resistor Calc", + "icon": "rescalc.png", + "description": "An intuitive, easy-to-use app that aids in the interpretation of resistor color codes and calculation of resistance values.", + "tags": "app,tool,electric,ohm,converter", + "storage": [ + {"name":"rescalc.app.js","url":"app.js"}, + {"name":"rescalc.img","url":"app-icon.js","evaluate":true} + {"name":"rescalc.app.img","url":"resistor.js","evaluate":true} + ], +}, \ No newline at end of file diff --git a/apps/rescalc/readme.md b/apps/rescalc/readme.md new file mode 100644 index 000000000..4fc9c4e70 --- /dev/null +++ b/apps/rescalc/readme.md @@ -0,0 +1,25 @@ +# Resistor Calculator + +Resistor Calculator is a Bangle.js application designed to assist with resistor color code interpretation and vice versa. It provides a convenient way to calculate the resistance value based on color bands and to find the color bands based on the resistance value. + +## Usage + +There are two main functions of the Resistor Calculator: + +1. **Calculate resistance from color bands:** You can select the colors of the 4 bands on the resistor, and the app will calculate the resistance and tolerance accordingly. + +2. **Find color bands from resistance:** You can specify a resistance value, multiplier, and tolerance percentage, and the app will display the corresponding color bands. + +The Resistor Calculator presents these functions in an intuitive menu system. Navigate through the menus using the touchscreen on your Bangle.js 2 watch. + +## Configuration + +The Resistor Calculator does not require any specific configurations. All settings are managed within the app itself. After installing the app, you can start it from your Bangle.js watch's app launcher. + +## Compatibility + +The Resistor Calculator is only compatible with Bangle.js 2 watches. + +## Creator + +The Resistor Calculator was created by [stweedo](https://github.com/stweedo). Please feel free to reach out if you have any questions or suggestions, or if you encounter any issues with the app. diff --git a/apps/rescalc/rescalc.app.img b/apps/rescalc/rescalc.app.img new file mode 100644 index 000000000..786445ab2 --- /dev/null +++ b/apps/rescalc/rescalc.app.img @@ -0,0 +1 @@ +°°ˆ‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+z¤دددددد¤zOOz¤ةددددد¤zO‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏UددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددU‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏$¤دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¤$‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¤دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¤‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏OددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددO‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¤دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¤‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏€دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¤‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏OددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددO‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏€دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد€‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏zددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددz‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد+‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏zددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددz‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد+‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏VVVVVVVVVVVVVVVVVVV+*دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد*+VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV++دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد++VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV++دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد++VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV+*دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد*+VVVVVVVVVVVVVVVVVVV‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد+‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏zددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددz‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد+‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏zددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددz‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏€دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد€‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏OددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددO‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏€دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد€‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥ددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$ددددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$دددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¤ددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$ددددددددددددددددددددد¤‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏Oدددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$ددددددددددددددددددددO‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏€دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$دددددددددددددددددد¤‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¤دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$دددددددددددددددد¤$‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏U¥ددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$ددددددددددددد¥U‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+z¤دددددة¤zOOz¤¥ددددد¤z+‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏ \ No newline at end of file diff --git a/apps/rescalc/rescalc.img b/apps/rescalc/rescalc.img new file mode 100644 index 0000000000000000000000000000000000000000..93cdcde0acdfa5ef459921fc88718b963b57f700 GIT binary patch literal 2308 zcmds$F>>255Jhna9YGb~!jc=E0&2kRq{ib5*bS0`F*@ZMP$SJihe+c|K~m{>8%_Q~ zghv!X*@cTtwjoHo-Tn9r-rsLdUlc-ox{wgkScH+ENfOffT~*ah)9klae$)nZ#lbwM zSb0mAkY_rkRCV1Po9&GjLU*|LW$Ag1Hd{TaDdD9qhzecCgyUY1Nb1Dwta1V2lixcIpGj3fEH_WsRJhw~CsDW&dy$8!Sb zSdGv4^ZSAXIj0s2C_u*BC0&qOt?)xoFF}Pi%pV`;p>>76h{CmjHXB^+pe`j*+lJX< zF$;K-dbm?)r(dSvP-neHot6gtWWs#w=&(XQeg8uauOIXCpOOFedpX97s3+B*KRs~$ z=U=+Vrvt;PEdMg#qp2}1SO1#l^8$`M`!KuGbBl-2#NYIDSlJ68qM=h5ds#lN3-RBnIcKj8ZZ`trBG*Sz&Q literal 0 HcmV?d00001 diff --git a/apps/rescalc/screenshot-1.png b/apps/rescalc/screenshot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2dad154aca99287a6388202930e7ba0c4b614527 GIT binary patch literal 3115 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 literal 0 HcmV?d00001 diff --git a/apps/rescalc/screenshot-2.png b/apps/rescalc/screenshot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf7eb0c52b1f3f32f98302a1a4601bcb71f8b95 GIT binary patch literal 2984 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 Date: Mon, 15 May 2023 22:49:15 -0500 Subject: [PATCH 03/22] Update app.js Added default 'none' for when there is no tolerance value provided Added back missing code for using multiplied value from menu for generating colors --- apps/rescalc/app.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/rescalc/app.js b/apps/rescalc/app.js index 3a149506e..c745754b2 100644 --- a/apps/rescalc/app.js +++ b/apps/rescalc/app.js @@ -83,7 +83,7 @@ function colorBandsToResistance(colorBands) { let firstBand = colorBands[0]; let secondBand = colorBands[1]; let multiplierBand = colorBands[2]; - let toleranceBand = colorBands[3]; + let toleranceBand = colorBands[3] || 'none'; // Add a default value for toleranceBand let significantDigits = colorData[firstBand].value * 10 + colorData[secondBand].value; let multiplier = colorData[multiplierBand].multiplier; let resistance = significantDigits * multiplier; @@ -225,7 +225,7 @@ function drawResistance(resistance, tolerance) { tolerance = 20; } - var toleranceStr = "±" + tolerance + "%"; + var toleranceStr = "آ±" + tolerance + "%"; var toleranceX = tolerance.toString().replace('.', '').length > 2 ? 10 : 14; g.drawString(toleranceStr.padEnd(4), 176 - toleranceX, y); } @@ -419,9 +419,9 @@ function drawResistance(resistance, tolerance) { E.showMenu(toleranceMenu); } - function drawResistorAndResistance(resistance, tolerance) { + function drawResistorAndResistance(resistance, tolerance, multipliedResistance) { console.log('Draw Resistor clicked'); - let colorBands = resistanceToColorBands((settings.resistance * settings.multiplier), settings.tolerance); + let colorBands = resistanceToColorBands(multipliedResistance || resistance, tolerance); drawResistor(colorBands, tolerance); drawResistance(resistance, tolerance); resetSettings(); @@ -462,7 +462,7 @@ function drawResistance(resistance, tolerance) { let formattedResistance = formatResistance(multipliedValue); let resistanceString = `${formattedResistance.value}${formattedResistance.unit}`; if (settings.tolerance) { - return `${resistanceString}, ± ${settings.tolerance}%`; + return `${resistanceString}, آ± ${settings.tolerance}%`; } else { return v ? `${resistanceString}` : ''; } @@ -508,4 +508,4 @@ function drawResistance(resistance, tolerance) { }, }; E.showMenu(mainMenu); -})(load); \ No newline at end of file +})(load); From c5cc53b548ee8f585ac20f36a5218d9b7d0f8f94 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Mon, 15 May 2023 23:06:06 -0500 Subject: [PATCH 04/22] Update metadata.json --- apps/rescalc/metadata.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/rescalc/metadata.json b/apps/rescalc/metadata.json index 64197fb8e..d45a55b13 100644 --- a/apps/rescalc/metadata.json +++ b/apps/rescalc/metadata.json @@ -2,11 +2,19 @@ "name": "Resitstor Calculator", "shortName" : "Resistor Calc", "icon": "rescalc.png", + "screenshots": [ + {"url":"screenshot.png"} + {"url":"screenshot-1.png"} + {"url":"screenshot-2.png"} + ], "description": "An intuitive, easy-to-use app that aids in the interpretation of resistor color codes and calculation of resistance values.", - "tags": "app,tool,electric,ohm,converter", + "tags": "app,tool,electricity,ohms,converter", + "supports":["BANGLEJS2"], + "readme": "README.md", + "allow_emulator": true, "storage": [ {"name":"rescalc.app.js","url":"app.js"}, {"name":"rescalc.img","url":"app-icon.js","evaluate":true} {"name":"rescalc.app.img","url":"resistor.js","evaluate":true} ], -}, \ No newline at end of file +}, From 9309b925c4fa8f41ddcd2300c5ffbb3f81a24381 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Mon, 15 May 2023 23:07:19 -0500 Subject: [PATCH 05/22] Delete readme.md --- apps/rescalc/readme.md | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 apps/rescalc/readme.md diff --git a/apps/rescalc/readme.md b/apps/rescalc/readme.md deleted file mode 100644 index 4fc9c4e70..000000000 --- a/apps/rescalc/readme.md +++ /dev/null @@ -1,25 +0,0 @@ -# Resistor Calculator - -Resistor Calculator is a Bangle.js application designed to assist with resistor color code interpretation and vice versa. It provides a convenient way to calculate the resistance value based on color bands and to find the color bands based on the resistance value. - -## Usage - -There are two main functions of the Resistor Calculator: - -1. **Calculate resistance from color bands:** You can select the colors of the 4 bands on the resistor, and the app will calculate the resistance and tolerance accordingly. - -2. **Find color bands from resistance:** You can specify a resistance value, multiplier, and tolerance percentage, and the app will display the corresponding color bands. - -The Resistor Calculator presents these functions in an intuitive menu system. Navigate through the menus using the touchscreen on your Bangle.js 2 watch. - -## Configuration - -The Resistor Calculator does not require any specific configurations. All settings are managed within the app itself. After installing the app, you can start it from your Bangle.js watch's app launcher. - -## Compatibility - -The Resistor Calculator is only compatible with Bangle.js 2 watches. - -## Creator - -The Resistor Calculator was created by [stweedo](https://github.com/stweedo). Please feel free to reach out if you have any questions or suggestions, or if you encounter any issues with the app. From 64fd52017a5e22345bc44e27fb87dcc3636ccd4f Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Mon, 15 May 2023 23:07:39 -0500 Subject: [PATCH 06/22] Delete icon.png --- apps/rescalc/icon.png | Bin 3639 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/rescalc/icon.png diff --git a/apps/rescalc/icon.png b/apps/rescalc/icon.png deleted file mode 100644 index d858ef005467804bd18880b0fbb5ae4fee2ebbcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3639 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 From cfd782b1b2a55c01d78604ff1bf66b0bdb5cb59b Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Mon, 15 May 2023 23:07:57 -0500 Subject: [PATCH 07/22] Create README.md --- apps/rescalc/README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 apps/rescalc/README.md diff --git a/apps/rescalc/README.md b/apps/rescalc/README.md new file mode 100644 index 000000000..43893f866 --- /dev/null +++ b/apps/rescalc/README.md @@ -0,0 +1,25 @@ +# Resistor Calculator + +Resistor Calculator is a Bangle.js application designed to assist with resistor color code interpretation and vice versa. It provides a convenient way to calculate the resistance value based on color bands and to find the color bands based on the resistance value. + +## Usage + +There are two main functions of the Resistor Calculator: + +1. **Calculate resistance from color bands:** You can select the colors of the 4 bands on the resistor, and the app will calculate the resistance and tolerance accordingly. + +2. **Find color bands from resistance:** You can specify a resistance value, multiplier, and tolerance percentage, and the app will display the corresponding color bands. + +The Resistor Calculator presents these functions in an intuitive menu system. Navigate through the menus using the touchscreen on your Bangle.js 2 watch. + +## Configuration + +The Resistor Calculator does not require any specific configurations. All settings are managed within the app itself. After installing the app, you can start it from your Bangle.js watch's app launcher. + +## Compatibility + +The Resistor Calculator is only compatible with Bangle.js 2 watches. + +## Creator + +The Resistor Calculator was created by [stweedo](https://github.com/stweedo). Please feel free to reach out if you have any questions or suggestions, or if you encounter any issues with the app. From 8e25ad3350bf5121aaaaf87952479a042e7e54c3 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Mon, 15 May 2023 23:08:26 -0500 Subject: [PATCH 08/22] Add files via upload --- apps/rescalc/rescalc.png | Bin 0 -> 3639 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/rescalc/rescalc.png diff --git a/apps/rescalc/rescalc.png b/apps/rescalc/rescalc.png new file mode 100644 index 0000000000000000000000000000000000000000..d858ef005467804bd18880b0fbb5ae4fee2ebbcb GIT binary patch literal 3639 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 literal 0 HcmV?d00001 From 65d2886c8889d060bb431739f5f1af7c8a45ad5f Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Mon, 15 May 2023 23:14:10 -0500 Subject: [PATCH 09/22] Update metadata.json --- apps/rescalc/metadata.json | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/apps/rescalc/metadata.json b/apps/rescalc/metadata.json index d45a55b13..7f2895fb2 100644 --- a/apps/rescalc/metadata.json +++ b/apps/rescalc/metadata.json @@ -1,20 +1,21 @@ -{ "id": "rescalc", - "name": "Resitstor Calculator", - "shortName" : "Resistor Calc", +{ + "id": "rescalc", + "name": "Resistor Calculator", + "shortName": "Resistor Calc", "icon": "rescalc.png", "screenshots": [ - {"url":"screenshot.png"} - {"url":"screenshot-1.png"} - {"url":"screenshot-2.png"} + {"url": "screenshot.png"}, + {"url": "screenshot-1.png"}, + {"url": "screenshot-2.png"} ], "description": "An intuitive, easy-to-use app that aids in the interpretation of resistor color codes and calculation of resistance values.", - "tags": "app,tool,electricity,ohms,converter", - "supports":["BANGLEJS2"], + "tags": ["app", "tool", "electricity", "ohms", "converter"], + "supports": ["BANGLEJS2"], "readme": "README.md", "allow_emulator": true, "storage": [ - {"name":"rescalc.app.js","url":"app.js"}, - {"name":"rescalc.img","url":"app-icon.js","evaluate":true} - {"name":"rescalc.app.img","url":"resistor.js","evaluate":true} - ], -}, + {"name": "rescalc.app.js", "url": "app.js"}, + {"name": "rescalc.img", "url": "app-icon.js", "evaluate": true}, + {"name": "rescalc.app.img", "url": "resistor.js", "evaluate": true} + ] +} From 0c2244eb5a3886453a4975b9b6ff248d01eb2e54 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Mon, 15 May 2023 23:30:13 -0500 Subject: [PATCH 11/22] Update app.js - changed 6 to 8 in comment --- apps/rescalc/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/rescalc/app.js b/apps/rescalc/app.js index c745754b2..c345155cb 100644 --- a/apps/rescalc/app.js +++ b/apps/rescalc/app.js @@ -156,7 +156,7 @@ function drawResistor(colorBands, tolerance) { g.drawLine(bandX, bandY, bandX, bandY + bandHeight); // left outline g.drawLine(bandX + bandWidth, bandY, bandX + bandWidth, bandY + bandHeight); // right outline - // if it's the fourth band, shift it over by an additional 6 pixels + // if it's the fourth band, shift it over by an additional 8 pixels if (i === 2) { currentX = bandX + bandWidth + 5 + 8; // update the current X position for the next band, accounting for the spacing } else { From 114b8c7f63570b25b97b3649d7bb3ce22023e495 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Thu, 18 May 2023 11:49:06 -0500 Subject: [PATCH 12/22] Update app.js for new resistor img position --- apps/rescalc/app.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/rescalc/app.js b/apps/rescalc/app.js index c345155cb..fba3a06d6 100644 --- a/apps/rescalc/app.js +++ b/apps/rescalc/app.js @@ -83,7 +83,7 @@ function colorBandsToResistance(colorBands) { let firstBand = colorBands[0]; let secondBand = colorBands[1]; let multiplierBand = colorBands[2]; - let toleranceBand = colorBands[3] || 'none'; // Add a default value for toleranceBand + let toleranceBand = colorBands[3] || 'none'; // Add a default value for toleranceBand let significantDigits = colorData[firstBand].value * 10 + colorData[secondBand].value; let multiplier = colorData[multiplierBand].multiplier; let resistance = significantDigits * multiplier; @@ -134,7 +134,7 @@ function drawResistor(colorBands, tolerance) { var numcolorBands = bandColors.length; var resistorStartY = ((g.getHeight() - resistorBodyHeight) / 2) + 48; clearScreen(); - g.drawImage(img, 0, 48); + g.drawImage(img, 0, 112); var bandWidth = (resistorBodyWidth - (numcolorBands * 2 - 1)) / numcolorBands; // width of each band, accounting for the spacing var bandHeight = resistorBodyHeight; // height of each band var currentX = resistorStartX; // starting point for the first band @@ -453,7 +453,7 @@ function drawResistance(resistance, tolerance) { showDrawingMenu(); } }; - + function showResistanceEntryMenu() { // Update the 'Ohms' field resistanceEntryMenu['Ohms'].value = settings.resistance; @@ -474,7 +474,7 @@ function drawResistance(resistance, tolerance) { E.showMenu(resistanceEntryMenu); } - + function showDrawingMenu() { let drawingMenu = { '': { @@ -508,4 +508,4 @@ function drawResistance(resistance, tolerance) { }, }; E.showMenu(mainMenu); -})(load); +})(); From 827b88dfbb9e0e006bdb6eb8cd9c99281d8b609a Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Thu, 18 May 2023 11:50:26 -0500 Subject: [PATCH 13/22] Added image data to resistor.js --- apps/rescalc/resistor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/rescalc/resistor.js b/apps/rescalc/resistor.js index 1e10c5ccc..251835378 100644 --- a/apps/rescalc/resistor.js +++ b/apps/rescalc/resistor.js @@ -1 +1 @@ -// TODO: Add image data +require("heatshrink").decompress(atob("2EwxH+AE41JGVBV/KvnPABD/ZAGJVNU/6tHKpIA/ADqx/Vv6x/Vv4A/WP6u/AH6w/VyB7/WOyu/AH6w/V34A/WH6u/AH6w/V34A/WGUAV/6v/WFyu/AH6wBV34A/WH6v/AH6v/V34A/WHav/AH6v/AH6v/V34A/WH6v/AH6v/NP4A/V7VWACSv/AH6vHTaav/AH6v/V/4A/V/4A/V/6v/AH6v/V/4A/V9/+ACSv/AH6vHTaav/AH6v/V/4A/V+aw/AH6uvV/4A/V/4A/V/6w/AH6u/V/4A/V/6w/AH6uxV4Kw/V36vuWAJx/V/yuuWH6u/V2Cw/V36w/AH6u/WH4A/V36wVWP6tzV3Kw/V36x/AH6t/WP4A/Vv6xZWZYNDAH4AHKpqn/WZ4AFJP5V9A=")) From 94c2c8dfa94de41a7eaf843689f09217a38c2914 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Thu, 18 May 2023 11:51:38 -0500 Subject: [PATCH 14/22] Delete rescalc.app.img --- apps/rescalc/rescalc.app.img | 1 - 1 file changed, 1 deletion(-) delete mode 100644 apps/rescalc/rescalc.app.img diff --git a/apps/rescalc/rescalc.app.img b/apps/rescalc/rescalc.app.img deleted file mode 100644 index 786445ab2..000000000 --- a/apps/rescalc/rescalc.app.img +++ /dev/null @@ -1 +0,0 @@ -°°ˆ‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+z¤دددددد¤zOOz¤ةددددد¤zO‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏UددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددU‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏$¤دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¤$‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¤دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¤‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏OددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددO‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¤دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¤‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏€دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¤‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏OددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددO‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏€دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد€‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏zددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددz‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد+‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏zددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددz‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد+‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏VVVVVVVVVVVVVVVVVVV+*دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد*+VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV++دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد++VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV++دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد++VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV+*دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد*+VVVVVVVVVVVVVVVVVVV‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد+‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏zددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددz‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد+‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏zددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددz‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏€دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد€‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏OددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددO‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏€دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد€‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥ددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$ددددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¥دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$دددددددددددددددددددددد¥‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¤ددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$ددددددددددددددددددددد¤‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏Oدددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$ددددددددددددددددددددO‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏€دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$دددددددددددددددددد¤‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏¤دددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$دددددددددددددددد¤$‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏U¥ددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددددد$ددددددددددددد¥U‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏+z¤دددددة¤zOOz¤¥ددددد¤z+‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏ \ No newline at end of file From dc00a246be86635bd241998ec9a5d31e00ce9acf Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Thu, 18 May 2023 11:51:52 -0500 Subject: [PATCH 15/22] Delete rescalc.img --- apps/rescalc/rescalc.img | Bin 2308 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/rescalc/rescalc.img diff --git a/apps/rescalc/rescalc.img b/apps/rescalc/rescalc.img deleted file mode 100644 index 93cdcde0acdfa5ef459921fc88718b963b57f700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2308 zcmds$F>>255Jhna9YGb~!jc=E0&2kRq{ib5*bS0`F*@ZMP$SJihe+c|K~m{>8%_Q~ zghv!X*@cTtwjoHo-Tn9r-rsLdUlc-ox{wgkScH+ENfOffT~*ah)9klae$)nZ#lbwM zSb0mAkY_rkRCV1Po9&GjLU*|LW$Ag1Hd{TaDdD9qhzecCgyUY1Nb1Dwta1V2lixcIpGj3fEH_WsRJhw~CsDW&dy$8!Sb zSdGv4^ZSAXIj0s2C_u*BC0&qOt?)xoFF}Pi%pV`;p>>76h{CmjHXB^+pe`j*+lJX< zF$;K-dbm?)r(dSvP-neHot6gtWWs#w=&(XQeg8uauOIXCpOOFedpX97s3+B*KRs~$ z=U=+Vrvt;PEdMg#qp2}1SO1#l^8$`M`!KuGbBl-2#NYIDSlJ68qM=h5ds#lN3-RBnIcKj8ZZ`trBG*Sz&Q From d9ab1e6f15d46516edc6781126b2c873c85274c2 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Thu, 18 May 2023 11:59:52 -0500 Subject: [PATCH 16/22] Update app.js - rename image --- apps/rescalc/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/rescalc/app.js b/apps/rescalc/app.js index fba3a06d6..4d5465604 100644 --- a/apps/rescalc/app.js +++ b/apps/rescalc/app.js @@ -126,7 +126,7 @@ function resistanceToColorBands(resistance, tolerance) { } function drawResistor(colorBands, tolerance) { - let img = require("Storage").read("rescalc.app.img"); + let img = require("Storage").read("rescalc-resistor.img"); let resistorBodyWidth = 51; let resistorBodyHeight = 43; let resistorStartX = 57; From b6a980a1211ea06f218eb98b6b6f3b19170dc149 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Thu, 18 May 2023 12:00:38 -0500 Subject: [PATCH 17/22] Update metadata.json - rename image --- apps/rescalc/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/rescalc/metadata.json b/apps/rescalc/metadata.json index 7f2895fb2..43b66385a 100644 --- a/apps/rescalc/metadata.json +++ b/apps/rescalc/metadata.json @@ -16,6 +16,6 @@ "storage": [ {"name": "rescalc.app.js", "url": "app.js"}, {"name": "rescalc.img", "url": "app-icon.js", "evaluate": true}, - {"name": "rescalc.app.img", "url": "resistor.js", "evaluate": true} + {"name": "rescalc-resistor.img", "url": "resistor.js", "evaluate": true} ] } From 3e062ef6ab7d056d0fa14435751d1c0c34b15be9 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Thu, 18 May 2023 12:07:05 -0500 Subject: [PATCH 18/22] Update metadata.json Added version info Fixed tags info --- apps/rescalc/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/rescalc/metadata.json b/apps/rescalc/metadata.json index 43b66385a..c14bbd6e5 100644 --- a/apps/rescalc/metadata.json +++ b/apps/rescalc/metadata.json @@ -3,13 +3,14 @@ "name": "Resistor Calculator", "shortName": "Resistor Calc", "icon": "rescalc.png", + "version":"0.01", "screenshots": [ {"url": "screenshot.png"}, {"url": "screenshot-1.png"}, {"url": "screenshot-2.png"} ], "description": "An intuitive, easy-to-use app that aids in the interpretation of resistor color codes and calculation of resistance values.", - "tags": ["app", "tool", "electricity", "ohms", "converter"], + "tags": "app, tool, electricity, ohms, converter", "supports": ["BANGLEJS2"], "readme": "README.md", "allow_emulator": true, From 3ba01bedab107cb43a2eb9b3600ce457d588d69f Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Thu, 18 May 2023 12:07:56 -0500 Subject: [PATCH 19/22] Create ChangeLog --- apps/rescalc/ChangeLog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/rescalc/ChangeLog diff --git a/apps/rescalc/ChangeLog b/apps/rescalc/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/rescalc/ChangeLog @@ -0,0 +1 @@ +0.01: New App! From 987fc4d0334827abe3f7bb40b14758441e9f1ed0 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Thu, 18 May 2023 12:33:13 -0500 Subject: [PATCH 20/22] Update app.js - Adjust positioning of bands for new resistor img --- apps/rescalc/app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/rescalc/app.js b/apps/rescalc/app.js index 4d5465604..cfb88e015 100644 --- a/apps/rescalc/app.js +++ b/apps/rescalc/app.js @@ -129,7 +129,7 @@ function drawResistor(colorBands, tolerance) { let img = require("Storage").read("rescalc-resistor.img"); let resistorBodyWidth = 51; let resistorBodyHeight = 43; - let resistorStartX = 57; + let resistorStartX = 52; var bandColors = colorBands; var numcolorBands = bandColors.length; var resistorStartY = ((g.getHeight() - resistorBodyHeight) / 2) + 48; @@ -156,9 +156,9 @@ function drawResistor(colorBands, tolerance) { g.drawLine(bandX, bandY, bandX, bandY + bandHeight); // left outline g.drawLine(bandX + bandWidth, bandY, bandX + bandWidth, bandY + bandHeight); // right outline - // if it's the fourth band, shift it over by an additional 8 pixels + // if it's the fourth band, shift it over by an additional 12 pixels if (i === 2) { - currentX = bandX + bandWidth + 5 + 8; // update the current X position for the next band, accounting for the spacing + currentX = bandX + bandWidth + 5 + 12; // update the current X position for the next band, accounting for the spacing } else { currentX = bandX + bandWidth + 5; // update the current X position for the next band, accounting for the spacing } From ec55e3d67dd7941c4e435062f4fec6267ff040e4 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Thu, 18 May 2023 12:45:01 -0500 Subject: [PATCH 21/22] Add files via upload --- apps/rescalc/screenshot-1.png | Bin 3115 -> 3030 bytes apps/rescalc/screenshot-2.png | Bin 2984 -> 3011 bytes apps/rescalc/screenshot.png | Bin 3025 -> 2906 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/rescalc/screenshot-1.png b/apps/rescalc/screenshot-1.png index 2dad154aca99287a6388202930e7ba0c4b614527..217c72ec98f96a42af5234df2721d146de3d9061 100644 GIT binary patch literal 3030 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 i8>@iuInaUkIxglAzlp%() zCVVW>C1nfOI*lZv8HI6)zV7q=55C{?Jmi+9qEX(KtQKWf|aX!!%D9h0V@Cm_lfumtY* zF7HHpmU`P>X>xIQ896bIU_|95Zf0r?E`hd+*#bM(f3km@u^yfYIev-iE99$QdOacO zovJV3qiFs?=cx%nQ`a)>bUHFoa=LADSo#j5F*Dq*!=Ov%b;6oqp!w={U>TdEUw_+u znu4O@?087cYaKYSLhw|E`dTIY^hS7G{c&-M| zB49^DvA_4FH{-@9nSz$7g5|XV)9x>b%TYN@@$-87o3>YrMjIw;uKFZnwHUPnIr`Q4 z!GfVxvsyslT6ZRUj`9xnV{~f2A)4>DSFz2Wj$+G;ClTI9PkJ;eHj+0K*`>PFfEtBW zr?9i4eyOMKUjF$T^Y7CAq^Zoj(q1V?`SJQ3)sR69Uz~QqI85A`#!P-YRg)X1Vzd~j zF9;@l+rLa$PO=^(JHATt?v`drBg?)^JG{60+mf1f15^5M0IoXsY>}#|kAHBocU@CtNJF2R9pKLzeoTryZ>{%`!{;Mt@;`aZmD#RN> zwp^z%pCL_|xVIzz(>AmyYL4n%{(D`gUIK*YD@5=1RXZ;$nmN1{0hYJK%!o>?fPc?m zz;~XvyA)R(0gKKmoesxZ!*?Bits6WBV1B<;oZu(G5W}tMNcew^o?AMxju{!pg19Ub z<*a}^6~TgjNWJPt`o2a{{K&Hl^}@~Sr3K~1AZgpFfbU5W5_nF!rF?9dPYRjxXOq?po;w?_qhQl%7RG%TTzEl`RlP0D zTYs+&D1|7VTSh87lX`5<&ZXy}NpBhg8E$tf-QLtH(!=fUTy{!#71)X0XMyR8Fi1e-;Ho^yViTSjtP^jJ2wtf9s1q_&QPOots6Tya#ut7LhsI^^WaW) zTA6S|xb5R`B}{XqX2agmj89Y6%=AW!>AjD%oOHz!c|+AjWt zsT~cH-MME)Sh3B>keOc{6Nb%PJqR`Z{&i1WBcQJ6zZP>Uu0MYw{F;CRJbU}i(CVS) zU&IVV^BrZb8Vzmv8+@TRJ6Ag8@sGW&5~nXc&!CH!+?VN99x0hi@Qti8DL#9zOXYg{ z)Q2O8c2}{Z_`tRMnPTM=7Sp9`>f+7XOAifvsxOu{3b?VJe@y*s z3h*S7J=FZ&E8j1lx6yt4BP$uP5*{JKCxfi*${q0namIoR^}y{7v#GLA z&K|3;V*`W)7Wp3e{Q0} z&$Lx+CLorPYiI;7JQH1Cpvw2lgK3yEt7W07ZIh22!}lo?fD{_sn)WP^=dywAlCaKAOuag6iNj>YF6^(S56MVa zKK&Um#4aLLky;En1Z2IuPjdEm&NGTr?D28-(^Y8!n7d6Vr{5IbOUhP>4cctFHSq|u zrU(>e;KDo-*>hP*s2|Z1ma1W^=utMO`=^rPS9FLc+Vw500*u4xsr;jo&}$=Kqww@NIkL`LX$;f+iBR?Uh!brOUu$MHh-7_Z)J^FJGvup; z_bY{sJ2fgrDuJqk?O?rQw(vPyn$MH@T2Whux8<whEVyYb5JwD-9jtTdvLuKQJtWPOA){RuHA?QLa;;6KBblT^2H*S?ecil)D zMM&M+F@N7Wrc_O-$%c6bD&>_4 z7ZJ#|h7VAyPBfp;&UT?=4)&Y$<|6HqaKi^z6k`kHA6U~YT$L)oeep>Y@wqr#?ciNr z(Zpt~+~kUEh^3aTV?sEW_e)aYm4l;p@ku;yjX#9*T;vT6y9h2JIyU9!UI2uWmnod@K~o^O&3X^v8#r7w}v%{3|@zjT)nR3PXMh<=t&E0I%HC z2-K2MIauUFd4EJ9!EtL_xLh%atrTReT^iL72|Bmi3RXv5OGV8%(1H#eO`IpcdwbuPuNg{ND|#-q-Ao3PK0LC}zM(|G^ zg7LY3KB>!Fgg{r-sn3-36p%*i*-y6_^5kwCI^A6Ws--a cA0hT(p&cVZi{3r@2k9TMGP5(SF(KXl50}!`W&i*H diff --git a/apps/rescalc/screenshot-2.png b/apps/rescalc/screenshot-2.png index aaf7eb0c52b1f3f32f98302a1a4601bcb71f8b95..0f348867264f037ec7bd13d921da2db52845b934 100644 GIT binary patch literal 3011 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 delta 2848 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 diff --git a/apps/rescalc/screenshot.png b/apps/rescalc/screenshot.png index bb9f8c0dd5a980ba8490b7c7c7ce36d4a96b8a88..23a233ca09cb65fae3fc9cb2da984420255b2991 100644 GIT binary patch literal 2906 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 sYLUe1=}bd+!gQo9<|Dg+fRp002PQSerZZvGKny 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 Date: Thu, 18 May 2023 19:57:42 +0200 Subject: [PATCH 22/22] grocery: Add settings Edit list on device --- apps/grocery/ChangeLog | 1 + apps/grocery/metadata.json | 7 +- apps/grocery/settings.js | 138 +++++++++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+), 2 deletions(-) create mode 100644 apps/grocery/settings.js diff --git a/apps/grocery/ChangeLog b/apps/grocery/ChangeLog index 294dab597..cb066ef3d 100644 --- a/apps/grocery/ChangeLog +++ b/apps/grocery/ChangeLog @@ -1,3 +1,4 @@ 0.01: New App! 0.02: Refactor code to store grocery list in separate file 0.03: Sort selected items to bottom and enable Widgets +0.04: Add settings to edit list on device diff --git a/apps/grocery/metadata.json b/apps/grocery/metadata.json index 26f67f3b0..8cf304cc1 100644 --- a/apps/grocery/metadata.json +++ b/apps/grocery/metadata.json @@ -1,7 +1,7 @@ { "id": "grocery", "name": "Grocery", - "version": "0.03", + "version": "0.04", "description": "Simple grocery (shopping) list - Display a list of product and track if you already put them in your cart.", "icon": "grocery.png", "type": "app", @@ -10,8 +10,11 @@ "custom": "grocery.html", "interface": "interface.html", "allow_emulator": true, + "dependencies": {"textinput":"type"}, "storage": [ {"name":"grocery.app.js","url":"app.js"}, + {"name":"grocery.settings.js","url":"settings.js"}, {"name":"grocery.img","url":"grocery-icon.js","evaluate":true} - ] + ], + "data": [{"name":"grocery_list.json"}] } diff --git a/apps/grocery/settings.js b/apps/grocery/settings.js new file mode 100644 index 000000000..5f84fd782 --- /dev/null +++ b/apps/grocery/settings.js @@ -0,0 +1,138 @@ +(function(back) { + const FILE = "grocery_list.json"; + const settings = require("Storage").readJSON(FILE,1)|| { products: [] }; + + function writeSettings() { + require('Storage').writeJSON(FILE, settings); + } + + const changeQuantity = (i) => { + const menu = { + "" : { title : /*LANG*/"Quantity" }, + "< Back" : () => edititem(i), + "x 0.1" : { + value : settings.products[i].quantity, + min:0, + max:9999, + step:0.1, + onchange : v => { + settings.products[i].quantity=v; + menu["x 1"].value = v; + menu["x 10"].value = v; + menu["x 100"].value = v; + }, + }, + "x 1" : { + value : settings.products[i].quantity, + min:0, + max:9999, + step:1, + onchange : v => { + settings.products[i].quantity=v; + menu["x 0.1"].value = v; + menu["x 10"].value = v; + menu["x 100"].value = v; + }, + }, + "x 10" : { + value : settings.products[i].quantity, + min:0, + max:9999, + step:10, + onchange : v => { + settings.products[i].quantity=v; + menu["x 0.1"].value = v; + menu["x 1"].value = v; + menu["x 100"].value = v; + }, + }, + "x 100" : { + value : settings.products[i].quantity, + min:0, + max:9999, + step:100, + onchange : v => { + settings.products[i].quantity=v; + menu["x 0.1"].value = v; + menu["x 1"].value = v; + menu["x 10"].value = v; + }, + }, + }; + E.showMenu(menu); + }; + + const edititem = (i) => { + const menu = {}; + const textName = /*LANG*/"Name"; + const textQuantity = /*LANG*/"Quantity"; + const textChecked = /*LANG*/"Checked"; + const textDelete = /*LANG*/"Delete"; + menu[""] = { "title" : ''+settings.products[i].quantity+' '+settings.products[i].name }; + menu["< Back"] = () => { + writeSettings(); + editlist(); + }; + menu[textName] = () => { + require("textinput").input({text:settings.products[i].name}).then(result => { + settings.products[i].name = result; + edititem(i); + }); + }; + menu[textQuantity] = () => changeQuantity(i); + menu[textChecked] = { + value : settings.products[i].ok, + onchange : v => { + settings.products[i].ok = v; + } + }; + menu[textDelete] = () => E.showPrompt(/*LANG*/"Delete" + " " + menu[""].title + "?").then(function(v) { + if (v) { + settings.products.splice(i, 1); + writeSettings(); + editlist(); + } else { + edititem(i); + } + }); + + E.showMenu(menu); + }; + + const editlist = () => { + const menu = settings.products.map((p,i) => ({ + title: ''+p.quantity+' '+p.name, + format: () => p.ok?'[x]':'[ ]', + onchange: v => setTimeout(() => edititem(i), 10), + })); + + menu[''] = { 'title': 'Grocery list' }; + menu['< Back'] = ()=>settingsmenu(); + E.showMenu(menu); + }; + + const settingsmenu = () => { + E.showMenu({ + "" : { "title" : "Grocery" }, + "< Back" : () => back(), + /*LANG*/"Edit List": () => editlist(), + /*LANG*/"Add item": () => { + settings.products.push({ + "name":/*LANG*/"New item", + "quantity":1, + "ok":false + }); + edititem(settings.products.length-1); + }, + /*LANG*/"Clear checked": () => E.showPrompt(/*LANG*/"Clear checked" + "?").then(function(v) { + if (v) { + settings.products = settings.products.filter(p => !p.ok); + writeSettings(); + } + settingsmenu(); + }), + }); + }; + + settingsmenu(); +})