Version_4_0_0

class Version_4_0_0 "Version 4.0.0 (June 4, 2020)"
    extends Modelica.Icons.ReleaseNotes;

    annotation (Documentation(info = "<html>\n<p>\nVersion 4.0.0 is <strong>not</strong> backward compatible to previous versions.\nA tested conversion script is provided to transform models and libraries of previous versions 3.x.y to the new version.\nShort Overview:\n</p>\n<ul>\n<li>About <a href=\"modelica://Modelica/Resources/Documentation/Version-4.0.0/ResolvedGitHubIssues.html\">649 issues (including 432 pull requests)</a> have been addressed for this release.</li>\n<li>This version is based on the recent Modelica language standard version 3.4.</li>\n<li>The library version (i.e., \"4.0.0\") follows semantic versioning using the convention <code>MAJOR.MINOR.BUGFIX</code>\n(see <a href=\"modelica://Modelica.UsersGuide.ReleaseNotes.VersionManagement\">Version Management</a> for details)\n and was decoupled from the version of the utilized version of the Modelica language standard.</li>\n<li>Obsolete classes of previous versions 3.x.y have been replaced.</li>\n<li>Obsolete classes, that could not be automatically converted to alternative implementations, have been moved to library ObsoleteModelica4.</li>\n<li>Major emphasis was put on improvements of the overall quality with respect to class naming and package structuring, conventions and style guide-lines, icons, documentation style and example models. The following sublibraries have been renamed.\n  <ol>\n    <li>Modelica.SIunits &rarr; Modelica.Units.{SI, NonSI, Conversions}</li>\n    <li>Modelica.Electrical.MultiPhase &rarr; Modelica.Electrical.Polyphase</li>\n    <li>Modelica.Electrical.QuasiStationary &rarr; Modelica.Electrical.QuasiStatic</li>\n  </ol></li>\n<li>The licenses of the utilized open-source third-party software components as well as the BSD 3-clause license of the Modelica Standard Library itself are available as separate <a href=\"modelica://Modelica/Resources/Licenses\">resources</a>.</li>\n</ul>\n\n<p>\nThe exact difference between package Modelica version 4.0.0 and version 3.2.3 is\nsummarized in a <a href=\"modelica://Modelica/Resources/Documentation/Version-4.0.0/DifferencesTo323.html\">comparison table</a>.\n</p>\n\n<p>\nThe following <font color=\"blue\"><strong>Modelica packages</strong></font> have been tested that they work together with this release of package Modelica\n(alphabetical list).\nHereby simulation results of the listed packages have been produced with package Modelica version 3.2.3 and\ncompared with the simulation results produced with version 4.0.0 Beta.1. The tests have been performed with Dymola 2020/2020x/2021:\n</p>\n\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\">\n  <tr>\n    <th>Library</th>\n    <th>Version</th>\n    <th>Library provider</th>\n  </tr>\n  <tr>\n    <td><a href=\"https://github.com/lbl-srg/modelica-buildings/issues/1789\">Buildings</a></td>\n    <td>&nbsp;&gt;&nbsp;6.0.0</td>\n    <td>LBNL</td>\n  </tr>\n  <tr>\n    <td>BrushlessDCDrives</td>\n    <td>1.1.1</td>\n    <td>Dassault Syst&egrave;mes</td>\n  </tr>\n  <tr>\n    <td>Clara</td>\n    <td>1.5.0</td>\n    <td>XRG Simulation GmbH and TLK-Thermo GmbH</td>\n  </tr>\n  <tr>\n    <td>ClaraPlus</td>\n    <td>1.3.0</td>\n    <td>XRG Simulation GmbH and TLK-Thermo GmbH</td>\n  </tr>\n  <tr>\n    <td>DriveControl</td>\n    <td>4.0.0</td>\n    <td>Anton Haumer</td>\n  </tr>\n  <tr>\n    <td>DymolaModels</td>\n    <td>1.1</td>\n    <td>Dassault Syst&egrave;mes</td>\n  </tr>\n  <tr>\n    <td>EDrives</td>\n    <td>1.0.1</td>\n    <td>Anton Haumer and Christian Kral</td>\n  </tr>\n  <tr>\n    <td>ElectricalMachines</td>\n    <td>0.9.1</td>\n    <td>Anton Haumer</td>\n  </tr>\n  <tr>\n    <td>ElectricPowerSystems</td>\n    <td>1.3.1</td>\n    <td>Dassault Syst&egrave;mes</td>\n  </tr>\n  <tr>\n    <td>ElectrifiedPowertrains</td>\n    <td>1.3.2</td>\n    <td>Dassault Syst&egrave;mes</td>\n  </tr>\n  <tr>\n    <td>ElectroMechanicalDrives</td>\n    <td>2.2.0</td>\n    <td>Christian Kral</td>\n  </tr>\n  <tr>\n    <td>EMOTH</td>\n    <td>1.4.1</td>\n    <td>Anton Haumer</td>\n  </tr>\n  <tr>\n    <td>HanserModelica</td>\n    <td>1.1.0</td>\n    <td>Christian Kral</td>\n  </tr>\n  <tr>\n    <td>IBPSA</td>\n    <td>&nbsp;&gt;&nbsp;3.0.0</td>\n    <td>IBPSA Project 1</td>\n  </tr>\n  <tr>\n    <td>KeywordIO</td>\n    <td>0.9.0</td>\n    <td>Christian Kral</td>\n  </tr>\n  <tr>\n    <td>Modelica_DeviceDrivers</td>\n    <td>1.8.1</td>\n    <td>DLR, ESI ITI, and Linköping University (PELAB)</td>\n  </tr>\n  <tr>\n    <td>Optimization</td>\n    <td>2.2.4</td>\n    <td>DLR</td>\n  </tr>\n  <tr>\n    <td>PhotoVoltaics</td>\n    <td>1.6.0</td>\n    <td>Christian Kral</td>\n  </tr>\n  <tr>\n    <td>PlanarMechanics</td>\n    <td>1.4.1</td>\n    <td>Dirk Zimmer</td>\n  </tr>\n  <tr>\n    <td>Testing</td>\n    <td>1.3</td>\n    <td>Dassault Syst&egrave;mes</td>\n  </tr>\n  <tr>\n    <td>ThermalSystems</td>\n    <td>1.6.0</td>\n    <td>TLK-Thermo GmbH</td>\n  </tr>\n  <tr>\n    <td>TIL</td>\n    <td>3.9.0</td>\n    <td>TLK-Thermo GmbH</td>\n  </tr>\n  <tr>\n    <td>TILMedia</td>\n    <td>3.9.0</td>\n    <td>TLK-Thermo GmbH</td>\n  </tr>\n  <tr>\n    <td>TSMedia</td>\n    <td>1.6.0</td>\n    <td>TLK-Thermo GmbH</td>\n  </tr>\n  <tr>\n    <td>VehicleInterfaces</td>\n    <td>1.2.5</td>\n    <td>Modelica Association</td>\n  </tr>\n  <tr>\n    <td>WindPowerPlants</td>\n    <td>1.2.0</td>\n    <td>Christian Kral</td>\n  </tr>\n</table>\n\n<p><br>\nThe following <font color=\"blue\"><strong>new libraries</strong></font> have been added:\n</p>\n\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\">\n<tr><td><a href=\"modelica://Modelica.Clocked\">Modelica.Clocked</a></td>\n    <td>This library can be used to precisely define and synchronize sampled data systems with different sampling rates.<br>The library previously was\n    available as separate package <a href=\"https://github.com/modelica/Modelica_Synchronous\">Modelica_Synchronous</a>.\n    (This library was developed by DLR in close cooperation with Dassault Syst&egrave;mes Lund.)\n    </td></tr>\n<tr><td><a href=\"modelica://Modelica.Electrical.Batteries\">Modelica.Electrical.Batteries</a></td>\n    <td>This library offers simple battery models.<br>\n    (This library was developed by Anton Haumer and Christian Kral.)\n    </td></tr>\n</table>\n\n<p><br>\nThe following <font color=\"blue\"><strong>new components</strong></font> have been added to <font color=\"blue\"><strong>existing</strong></font> libraries:\n</p>\n\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" style=\"border-collapse:collapse;\">\n<tr><td colspan=\"2\"><strong>Modelica.Blocks.Sources</strong></td></tr>\n<tr><td>SineVariableFrequencyAndAmplitude<br>CosineVariableFrequencyAndAmplitude</td>\n    <td>Added signal sources with variable amplitude and frequency; sine and cosine waveforms are provided.</td></tr>\n<tr><td>Sinc</td>\n    <td>Added signal source of <code> amplitude*sin(2*&pi;*f*t)/(2*&pi;*f*t)</code>.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Electrical.Analog.Sources</strong></td></tr>\n<tr><td>SineVoltageVariableFrequencyAndAmplitude<br>CosineVoltageVariableFrequencyAndAmplitude<br>SineCurrentVariableFrequencyAndAmplitude<br>CosineCurrentVariableFrequencyAndAmplitude</td>\n    <td>Added voltage and current sources with variable amplitude and frequency; sine and cosine waveforms are provided.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Electrical.Machines.Sensors</strong></td></tr>\n<tr><td>SinCosResolver</td>\n    <td>Added resolver with two sine and two cosine tracks to be used in drive control applications.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Electrical.Machines.Utilities</strong></td></tr>\n<tr><td>SwitchYDwithArc</td>\n    <td>Added wye delta switch with arc model and time delay between the two switching events.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Electrical.PowerConverters</strong></td></tr>\n<tr><td>ACAC</td>\n    <td>Added single-phase and polyphase triac models (AC/AC converters).</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Magnetic.FluxTubes.Shapes.FixedShape</strong></td></tr>\n<tr><td>HollowCylinderCircumferentialFlux<br>Toroid</td>\n    <td>Added circumferential flux models of hollow cylinder and toroid with circular cross section.</td></tr>\n<tr><td colspan=\"2\"><strong>Magnetic.QuasiStatic.FluxTubes.Shapes.FixedShape</strong></td></tr>\n<tr><td>HollowCylinderCircumferentialFlux<br>Toroid</td>\n    <td>Added circumferential flux models of hollow cylinder and toroid with circular cross section.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Mechanics.MultiBody.Visualizers.Advanced</strong></td></tr>\n<tr><td>Vector</td>\n    <td>Added 3-dimensional animation for visualization of vector quantities (force, torque, etc.)</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Mechanics.Translational.Components</strong></td></tr>\n<tr><td>RollingResistance</td>\n    <td>Added resistance of a rolling wheel incorporating the inclination and rolling resistance coefficient.</td></tr>\n<tr><td>Vehicle</td>\n    <td>Added simple vehicle model considering mass and inertia, drag and rolling resistance, inclination resistance.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Math</strong></td></tr>\n<tr><td>BooleanVectors.andTrue</td>\n    <td>Similar to <code>allTrue</code>, but return <code>true</code> on empty input vector.</td></tr>\n<tr><td>Matrices.LAPACK.dgeqp3</td>\n    <td>Compute the QR factorization with column pivoting of square or rectangular matrix.</td></tr>\n<tr><td>Random.Utilities.automaticLocalSeed</td>\n    <td>Create an automatic local seed from the instance name.</td></tr>\n</table>\n\n<p><br>\nThe following <font color=\"blue\"><strong>existing components</strong></font> have been <font color=\"blue\"><strong>improved</strong></font> in a <font color=\"blue\"><strong>backward compatible</strong></font> way:\n</p>\n\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" style=\"border-collapse:collapse;\">\n<tr><td colspan=\"2\"><strong>Modelica.Blocks.Sources</strong></td></tr>\n<tr><td>CombiTimeTable</td>\n    <td>Added second derivative and modified Akima interpolation.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Blocks.Tables</strong></td></tr>\n<tr><td>CombiTable1Ds<br>CombiTable1Dv</td>\n    <td>Added second derivatives and modified Akima interpolation.</td></tr>\n<tr><td>CombiTable2Ds<br>CombiTable2Dv</td>\n    <td>Added second derivatives.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Electrical.Analog.Basic</strong></td></tr>\n<tr><td>Gyrator</td>\n    <td>Serves as generalized gyrator model as IdealGyrator was removed.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Electrical.Analog.Ideal</strong></td></tr>\n<tr><td>IdealizedOpAmpLimited</td>\n    <td>Added homotopy to operational amplifier.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Electrical.Semiconductors</strong></td></tr>\n<tr><td>NPN<br>PNP</td>\n    <td>Added optional substrate connector.</td></tr>\n</table>\n\n<p><br>\nThe following <font color=\"blue\"><strong>existing components</strong></font> have been <font color=\"blue\"><strong>changed</strong></font> in a <font color=\"blue\"><strong>non-backward compatible</strong></font> way:\n</p>\n\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" style=\"border-collapse:collapse;\">\n<tr><td colspan=\"2\"><strong>Modelica.Blocks</strong></td></tr>\n<tr><td>Nonlinear.Limiter<br>Nonlinear.VariableLimiter</td>\n    <td>The superfluous parameter <code>limitsAtInit</code> has been removed.</td></tr>\n<tr><td>Continuous.PID</td>\n    <td>The initialization option <code>initType</code>&nbsp;=&nbsp;<code>InitPID.DoNotUse_InitialIntegratorState</code> to only initialize the integrator state has been removed. This option has been converted to both initialize the integrator state and the derivative state, i.e., <code>initType</code>&nbsp;=&nbsp;<code>Init.InitialState</code>.</td></tr>\n<tr><td>Continuous.LimPID</td>\n    <td>The superfluous parameter <code>limitsAtInit</code> has been removed.<br>The initialization option <code>initType</code>&nbsp;=&nbsp;<code>InitPID.DoNotUse_InitialIntegratorState</code> to only initialize the integrator state has been removed. This option has been converted to both initialize the integrator state and the derivative state, i.e., <code>initType</code>&nbsp;=&nbsp;<code>Init.InitialState</code>.</td></tr>\n<tr><td>Nonlinear.DeadZone</td>\n    <td>The superfluous parameter <code>deadZoneAtInit</code> has been removed.</td></tr>\n<tr><td>Interfaces.PartialNoise<br>Noise.UniformNoise<br>Noise.NormalNoise<br>Noise.TruncatedNormalNoise<br>Noise.BandLimitedWhiteNoise</td>\n    <td>As a side-effect of the updated computation in Modelica.Math.Random.Utilities.automaticLocalSeed the <code>localSeed</code> parameter is computed differently if <code>useAutomaticLocalSeed</code> is set to true.</td></tr>\n<tr><td>Types.InitPID</td>\n    <td>The enumeration type has been converted to <code>Types.Init</code> with exception of the alternative <code>InitPID.DoNotUse_InitialIntegratorState</code>, that was converted to <code>Init.InitialState</code> leading to a different initialization behaviour.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Electrical.Machines.Utilities</strong></td></tr>\n<tr><td>SwitchYD</td>\n    <td>The <a href=\"modelica://Modelica.Electrical.Polyphase.Ideal.IdealCommutingSwitch\">IdealCommutingSwitch</a> is replaced by an <a href=\"modelica://Modelica.Electrical.Polyphase.Ideal.IdealOpeningSwitch\">IdealOpeningSwitch</a> and an <a href=\"modelica://Modelica.Electrical.Polyphase.Ideal.IdealClosingSwitch\">IdealClosingSwitch</a> to allow a time delay between the two switching actions.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Electrical.Spice3</strong></td></tr>\n<tr><td>Internal.MOS2<br>Semiconductors.M_NMOS2<br>Semiconductors.M_PMOS2</td>\n    <td>The final parameter <code>vp</code> has been removed.<br>The obsolete variables <code>cc_obsolete</code>, <code>icqmGB</code>, <code>icqmGS</code>, <code>icqmGD</code>, <code>MOScapgd</code>, <code>MOScapgs</code>, <code>MOScapgb</code>, <code>qm</code> and <code>vDS</code> have been removed.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Magnetic.QuasiStatic.FundamentalWave.Utilities</strong></td></tr>\n<tr><td>SwitchYD</td>\n    <td>The <a href=\"modelica://Modelica.Electrical.QuasiStatic.Polyphase.Ideal.IdealCommutingSwitch\">IdealCommutingSwitch</a> is replaced by an <a href=\"modelica://Modelica.Electrical.QuasiStatic.Polyphase.Ideal.IdealOpeningSwitch\">IdealOpeningSwitch</a> and an <a href=\"modelica://Modelica.Electrical.QuasiStatic.Polyphase.Ideal.IdealClosingSwitch\">IdealClosingSwitch</a> to allow a time delay between the two switching actions.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Mechanics.MultiBody.Forces</strong></td></tr>\n<tr><td>WorldForce</td>\n    <td>The parameters <code>diameter</code> and <code>N_to_m</code> have been removed.</td></tr>\n<tr><td>WorldTorque</td>\n    <td>The parameters <code>diameter</code> and <code>Nm_to_m</code> have been removed.</td></tr>\n<tr><td>WorldForceAndTorque</td>\n    <td>The parameters <code>forceDiameter</code>, <code>torqueDiameter</code>, <code>N_to_m</code>, and <code>Nm_to_m</code> have been removed.</td></tr>\n<tr><td>Force</td>\n    <td>The parameter <code>N_to_m</code> has been removed.</td></tr>\n<tr><td>Torque</td>\n    <td>The parameter <code>Nm_to_m</code> has been removed.</td></tr>\n<tr><td>ForceAndTorque</td>\n    <td>The parameters <code>N_to_m</code> and <code>Nm_to_m</code> have been removed.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Mechanics.MultiBody.Joints</strong></td></tr>\n<tr><td>Prismatic</td>\n    <td>The superfluous constant <code>s_offset</code> has been removed.</td></tr>\n<tr><td>Revolute</td>\n    <td>The superfluous constant <code>phi_offset</code> has been removed.</td></tr>\n<tr><td>FreeMotion<br>FreeMotionScalarInit</td>\n    <td>The parameter <code>arrowDiameter</code> has been removed.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Mechanics.MultiBody.Parts</strong></td></tr>\n<tr><td>Body</td>\n    <td>The superfluous parameter <code>z_a_start</code> has been removed.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Mechanics.MultiBody.Sensors</strong></td></tr>\n<tr><td>AbsoluteSensor<br>RelativeSensor<br>Distance</td>\n    <td>The parameter <code>arrowDiameter</code> has been removed.</td></tr>\n<tr><td>CutForce</td>\n    <td>The parameters <code>forceDiameter</code> and <code>N_to_m</code> have been removed.</td></tr>\n<tr><td>CutForce</td>\n    <td>The parameters <code>torqueDiameter</code> and <code>Nm_to_m</code> have been removed.</td></tr>\n<tr><td>CutForceAndTorque</td>\n    <td>The parameters <code>forceDiameter</code>, <code>torqueDiameter</code>, <code>N_to_m</code>, and <code>Nm_to_m</code> have been removed.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Mechanics.MultiBody.Visualizers</strong></td></tr>\n<tr><td>Advanced.Arrow<br>Advanced.DoubleArrow<br>FixedArrow<br>SignalArrow</td>\n    <td>The parameter <code>diameter</code> has been removed.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Fluid.Machines</strong></td></tr>\n<tr><td>PartialPump</td>\n    <td>The superfluous parameter <code>show_NPSHa</code> has been removed.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Thermal.HeatTransfer</strong></td></tr>\n<tr><td>Fahrenheit.FromKelvin<br>Rankine.FromKelvin<br>Rankine.ToKelvin</td>\n    <td>The superfluous parameter <code>n</code> has been removed.</td></tr>\n</table>\n\n<p><br>\nThe following <font color=\"red\"><strong>critical errors</strong></font> have been fixed (i.e., errors\nthat can lead to wrong simulation results):\n</p>\n\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" style=\"border-collapse:collapse;\">\n<tr><td colspan=\"2\"><strong>Modelica.Blocks.Math</strong></td></tr>\n<tr><td>Pythagoras</td>\n    <td>The case with negative <code>y2</code> was not correctly considered if <code>u1IsHypotenuse</code> is <code>true</code>. This has been corrected.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Electrical.Semiconductors</strong></td></tr>\n<tr><td>Diode</td>\n    <td>Fixed unit error in current equations.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Electrical.Spice3.Additionals</strong></td></tr>\n<tr><td>poly</td>\n    <td>The case with one coefficient and one variable was not correctly considered. This has been corrected.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Fluid.Dissipation.PressureLoss.General</strong></td></tr>\n<tr><td>dp_volumeFlowRate_DP<br>dp_volumeFlowRate_MFLOW</td>\n    <td>The mass flow rate was not correctly computed if the pressure drop is a linear function of the volume flow rate. This has been corrected.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Media.Air.MoistAir</strong></td></tr>\n<tr><td>density_derX<br>s_pTX<br>s_pTX_der</td>\n    <td>The calculation was wrong. This has been corrected.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Media.Air.ReferenceAir.Air_Base</strong></td></tr>\n<tr><td>BaseProperties</td>\n    <td>The unit of the specific gas constant <code>R_s</code> was not correctly considered. This has been corrected.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Media.IdealGases.Common.Functions</strong></td></tr>\n<tr><td>s0_Tlow_der</td>\n    <td>The calculation was wrong. This has been corrected.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Media.IdealGases.Common.MixtureGasNasa</strong></td></tr>\n<tr><td>T_hX</td>\n    <td>The function inputs <code>exclEnthForm</code>, <code>refChoice</code> and <code>h_off</code> were not considered. This has been corrected.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Media.Incompressible.TableBased</strong></td></tr>\n<tr><td>T_ph</td>\n    <td>The pressure negligence was not considered. This has been corrected.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Media.R134a.R134a_ph</strong></td></tr>\n<tr><td>setState_pTX</td>\n    <td>Only applicable in one-phase regime: The Newton iteration for the calculation of the density may possibly converge to the wrong root. This has been improved.</td></tr>\n<tr><td>setState_dTX<br>setState_psX</td>\n    <td>The calculation was wrong in two-phase regime. This has been corrected.</td></tr>\n<tr><td colspan=\"2\"><strong>Modelica.Utilities.System</strong></td></tr>\n<tr><td>getTime</td>\n    <td>The month and year was only correctly returned if the implementing source file (ModelicaInternal.c) was compiled for Windows OS. This has been corrected.</td></tr>\n</table>\n</html>"));
end Version_4_0_0;