TUZOV3RLVWI8b2I8Uj1NRExDZE5WWlFaQz9bQFpJX2NVcT5sS1pgTlxcQE5kXFxRZ3F4SGlKRFFrXFxhc115VUlcXHM6WE5JQEpETG5aQUpTZFJKRExTXFxqSlxca1pATWpdU2xQTXFEdEd4d0dtU15sdl5VcFVoU05hbXJYbWpIc3RIWWdtTWVJc0NETEltUGtEVG1xWUpgVnM9S2RMTl5ETTxhTjtBTVhNblNcXFJObUo7ZG1LRFJASG11aHlpcXFvdW5oZXV4bXVVeXhvVHh5SXJ3ZFFxWHF0UHF0UG9lcXhxaVR3dXVRbVREcVJCRE4+QEw8PUtbXFxuOk1XUmVKPkBMPEM8TE9RXFxqSkxCOjo6XmpEaVpbXmpKOjo6OjpCTm1HQkNGPj88Ojo6OkJec0dAa2R1P0JRbVVzZVZQeXhAb2JDS1hJaUl5WVRvaUR1T1dvUVdzcXRsZ1ZTd3dla1RmP3NlY1NZXWlpcWk8eVJ5S3lJUWhhdVNVPVd0W0lNQVZgVXRGRWlfcXZVR3llV1JSeVdDQ0Y+P1RzP0dAc3V3d3l4YWV3RVQ+Z0hMbUVwd3dSSUZnZVdoVXlGT0VzS1RgdXNYZ3NERWM6T1lgR2h3aXJJeVloU3hRW0dKd1l3QXVBQVVrW3dJW0ddQ0Y+P0Rkc0RDTXhBcXR5S1loeXV2R1ltc1U8Z0RCUWdPVWdeSXhvWXdXd2lrS0VJcUhEeUNOSVZVeXVUUXk+YUNXU3k9ZVZxeUJwSVU8PUNbY3lERWlKeVZjO0hUV2dYTWJVc0hnTXZFPWROZUQ7VWhLO1RQR3hGVWdhWVV3U3lZZXlUeXRyU2I7PUNbWzpASjx0bDxUTmRVVGBgU0NBS1k9TU9pd0lcXFBZbVlzWHhbaVFvaVdaQE9dWXRWYXVmdG12WHhIYXN4XVFpQVloSVVZXWp3cWxKTFJEdE5vWW5DUU5BeVVLVHdAaXk/dXFQeWx5RXFDWVh5aXdRZXNtbXB5eHVveFNYQHVQWE9JcVNSZFFMbXV1cXRjZE5lWExtYG1fQHF4RXVOWEtGYHZgbVduTXY+dHY/cW5WTEtjeVhLRW1GYE1zTGxPQGRgYG1tb2t2P3dwWHVsYF1hd2RnYGU/R25IQHBJUVxcPE9uQ3ZzdXB3UUZnc1hyc1lxTk5abkZ4YXFvWXZvcWlhQGZaXVl0eWZpVm90eWZ4cWBtXVdbYGhjZkZtbEdaP3ZyZnZmY25vWW9wSl9wdGF3PmlibWFlZ3ZjP2d0a19qaGh0ZUh5XlFseHZaTkZbd0lhYVBeR0dyV0BcXEx5bGJncHl5X0l3eWNwcFB4aEx5XFxwQHVBcWxucW1xYHVsd2E7X2F5QWhpUG5rYXdJP2VXYW5cXEZfVWFzP3BfTkdfeVFbPlB3Tld5cXhnWXFdY19iUUdfW05pXl5cXF9XdmhgXFxSXnNGYGJraGdJT2BpQG9aUW1ycHU7WWJBUGJpeXRmVmtkWHBiSHZHZ3FIeXJ3YVpTcHZaTnVGd2ZBd2pNb3E9b3hBYXNJVnlLb3lbWHJASGFdVnhrd3dDR2pCSWZCeWVpeGZCdmdLd3dHd2RAZ3hlT2lfWVttYV5Pb3RsP255dnZkYGtbd3hDWHk9d21KeXddTmtDZ2ROUWljb3FcXEh1cXZfXmh0PXhfXll1QU5bY1dmeVh5alFvUUBhZ1l3UXleaj52W2l2cWluQXdlbFl3SW5jWFZcXGBeZk9IYnluZlBZcGR4XFxaaWRpSGh1aWd4ZmlwYF13cXBUUHlmRl5LaWhFVmVDP2dkT3BxWHBuaG9yUGM9aW9jcGU/T1p1dmN5eGNeaXJfcW9MTnRURmB5aWllYWJUbnVfV1tLd3FQRmloZ25CYW5xUXBIWV9GaHBVcXheX2NdUHZqWWxZcWdxb3BnZ3dBYF1NaW5reW5GVmxxYG13b2JIT2FGcWJiQW9uPmB5T2BHb212cHNJTnF4bm9nYXlocVxcYk9hT29cXF9RYnlHb2JZbnJYZGd5bF95X0x5aT1xXXdeYzpIdF1XcGVAY2I+aExodFd2Zk9QXj1oaWlxcXRRZ1l5bFhPbHNHXz9mXkRAZl1YbUJhWndAdHdxdE4/ZFtpY1tvZ014d3NBcVk+bWFBaT93X2RHZ2NHaGx5eHR2d2hZcWlxc3Z3Ync/dl95XWFxbU5AXlt5bHk+cmtAcHRwWnRpYE9neXk+eDpZanN2eGZwd3FgbVtBZmFhc1NYbG93c2BEQEVXdWNpV3FXdUF4Z21pPHdkUVVVcmV2QV9YYG1VYlVTd2djXXF4O19GVUFpUmN3VWt0YTt4dTtWUGlXVnF5Wj9IRVFjcD94dGlZa1NzVndTeWdzYV9jX0F3cWd0TnlWQ0NjRldmSl1Ha2VkQXNSWz1XRFVHVkt2aHlXdHdId3dXQ1dnTl1IQ3VnXFxFYmdpZ1VdWW1vU2dpVV9xeWtLWHQ/c2VTST9teGhfVnd1eDs7Zk47UltDeG1DZnQ9eU11dF9taWlLeWl3YmxPdFtBeVV5ZnBbVlNvSVd1eUdDZEdTU2lFWE5TQ01FRGtZaXh3ZEN3dHdVd2FLc0FzRFY9ZFFPZEttRG0/R0ZfSGQ7SERXZ2pzUkRjWGF3d2I7WXdfZ289eDxZeFRVVV0/dXNlRERdZD9RdVZDdkp5ck5fR0RJeXJrY25lZj55UzpFR25vZ3F5d1l5d0JDVDt1eEZvaGdjVHVJZVJPYzo9VDpTYmpvaD1JSFdJU3Y/ZGFFQ3V5ZHdVWFM9ZlxcRVZwV1NSR3lcXEVIVEFJZFV5QGNkZ0tXWT9jTXVoa3Vld0FmWXlkeHF0aVVHd3dzTEtEVUVyQkFXRlNzb1dCRVl0dXlkdXdFTUVoYk1TeV15UllpQGl1SG9ZRT9zY3lkck9DQWtWajtTP0lCW291RUVVallEZml5TFFWeVtERHNJal11RUVQeXVLSmxQbUV2YUBVYmBxaXh5QHlzbVRQZERYYlRzRmlqeFFUP2FXP3BLQFVLT1lLYFVtZ2BqPmVLQ1VrbV10c015QkhNPlxcS0Zwd2NZTmQ9TXNsS1RQVklYbFFFcFFdVUBQbF14cWpleGxBcnZJUklYVklkSj1hTWtdUlNodHNBb1VVdHZpUlFcXExKcEtjaXhdcVN1QXVRYUpqZGtLWXhMaUw9VXBXVHI6aVhuRUo/RHlXQVg9aXhTbXZiTXlibE5McWtTVFBgTGxzcGpEeUxdZG10SFE/SE9ORHZ4TXNvUFZwcHlWeEpDRFh0ZVldcFlgeG15VFJkTVdmRFliSW5BUHBoaU5ESFdPUExQRXhGRHd3PXJ2bUpuRW5QZFhiWG1CRG1vPXdvYXNPVHFHWG5weG9ZWHB2cFVpcFZZUHhEeVJJRE1WZHB5PHZ4TGo+RFd3dFlWeUpKaVlyTEtjeXA/UXdtaGxKcW5fYXdtYGo+XXRmTFlhXU9WSW9CcHVTTEtBRWtSaHRlQFNSUGs/WG5xXXNMYXNhYEtaeVdrPHBYXW9LWXBfZHR3XXNQTEpoaUxzbXd5YVVtRE89YHRddVBzVFVlUWxpSVNkVXZBaFVNTG9OdWtCSU9tXFxSYHhZVl1va1h4TVhTeVlwRVxcbUJkU2xxdnk9TGVteGFZWU1hWHZUV1lZdExVeUF1SztcXFlmRGxLVHQ+bVZYaU5QSW9RTE1zZXVScHNlWXlMUHl3aXdcXGRXcHVteUR4dGhZZ1VxTG1WeG1yeHh1RWRRZVhOb3hYb2hteXlZQmBYVHl0c2R3XFxEcFhxeW10d25FS1BoUEQ8TER5bVJQdUpET2dsVmZcXFhqVExbUHhKWXhFTHZoWVdQXFx2YjxLZGFtakhtRXRPYXVXbVFtcWlveVlUZkl1RVBsZXRMYGFXPkhvdjx3cEF3W3VPTHRPTVlOTWFRQmVqUl1xbFFzZVRZWT1scEBSaE1PUURYbFF0P3hvXFx1b089bmVMVmBATD5YWTp5Sl10dWRgUWBAbENEUmBUVHh1S3VQWV5oalNta3Rwa2NZd1xcUHJiUHdEeGx4bVd4QFJqWXQ/XFxMTWFwPWVVUXVvZUFRS2hsdmBTbFxcdHFlVWJUbz5cXHlESW5FZFRFdWx4bVJkeVNYTE5XaVFjdHZtZXVvdXRzTFJVUFBnRGtcXEB3ZGRyXFxMZ0NQbHBgZWdfZUJXeWRpZnFZc0F3b1VndT5XYENweVpwb1leZnBeZEJ3cWduZFlob15xYF9eblxcP3NyUWViZms7QW1bQFxcR0dual5cXEVwZHVXdV5ZdnVHbHQ+cD9fdkdYanB3cm1nZlNWZ2ZpckxQXWpPbGVgZXJPX1xcVmc+b2JJaWxOUWtzT15XVnE/b1pZUF9MWWhWX253aGJeZ3VvTmx0QHlVUWZvXnFtQHBucXA8SWx0aXQ/UV5peHFacXd1Pnled2dzd2V4WWxXSXlHcGlZcXl1RmxPeXdOYHRcXHhlRGhgYG9ncFB0PmBxUGdgRWBxZmhfaGBpWnlbXFxWZ2ZheGlBZWFudEJZeGxYd113eElmYnh3bFhocGdYXVtOeExxYnFgX3hnaEtgZFNXXlxcT19HbmVyZ3NoX2lwaWFtaUZRWEFtc3hdc1g7eUM7eXFzVXZjdFFhZ2Q7V2BRckVFeGpRaXhreUBNdXJreVVjRnFTY1RxZlNfUmNxeVBrVV1HV2t1VV5rc0JzZUlZU2ZpdWNJZHZTVFp1c2FzR3ddeGlLU1hFeVxcV2U6O2Z2a1k8R0I+d0N3XVZJdVJ5cXdxdUlkS1VRO0dPUUVdS1lVUXJoZ3VJY3lSa3M7YVdHPUVSY3luWWdlT1NTY3hOeWVbc2lLS1Z3cVlAX0NXS3d2aVlsSVM9X1ZqZVVnX1hXP3dLZ2JFc0RgZXhbP2h0R2NNdUdrTXR0RWVpS2ZmQ1RVQVVRO1RdX2hrTWRnWXdVeWZGb2lMY3ZzV2M9PXR3W1RkdWlnb2RwY0ZeX2duY1djaVRmS1VHY1I8XUlOW2Ngb3VnV2ZSXXVVO0hlRUJAaUdkaXVBd2lnZUJaY3h2UVVpWVhaO0Y9RVRyeG9CaHhYeW4+UXFwdWxCYW1pRHFBQVB1RFRiTXlRdE1RRFlvdW5CSXF5YU5sbXlXTE5hXVVkSFNReVlpcVdJWXlyQHNvWXlWQXBzWFh4QG13XXNGWUtEaHJWeW9FQHZ0eFRvYHhYVHlFeXRtVXRlZHI8TFNJaXBweXdFUXJZRHFfRXJmYGpRRFNQaFA8RFRGTW5ERVJKYXM/XFxsQkBPdVFqcHlURlBYW3hxbmRxPlxcT21tTl1sU0JNdVpEamdMazpdVGZgcUxAb2V0T2FVV2lEdl1QTUBtaERXZEpIa1Rua2NRWm5ebU9XcmJZW1tOYm93cV4+W0toYXdGX2NoXWJxY25uW1I+ZF1WWmRfX2F3bUg/ZVdhY0NIZkBWZGJnXWRpZkNWZ11XaFpIXmZxYURndHhAX01QeV5mY29OYWB2XFxtaGNjQW9HT3lIZm9oUGpbYWdNcXlQbml4YFxcVFBmW0F3WT5kZj5gbUlcXGJgZWZuc1BvXzp4dWZpWlJgeXhHcEhRcVtWeE9RYXVxZnFOck53c1VObFRJeVdQck15ZWp5d1xcZ3N2eWBrQGZ0ZmZ5P2ptcFxcQUlrXU5eXVltP1Fta3dqUmdgPVZ0c2d1XFx3cUJwbFJJW3RoXm9oeXhgdXZwZnZPY2ZwcnFJa093YFZfb1tweGl5cnV2XW13eFk+c3BPaElneW9ZbWh5XWFndVJIbUdHcEh3ZVpOYHdZXFw7aWNNYGZTZ2FKb14/R2RxWW9dT3lBTmJ2XnNKUG48WGhIX2hXQHh3bl1hb3A7PnZUSWhoeHdBR3NHUW5uR3ZRbmhZcWlpZm5ySF5jR2JSaFtrX115b2tqSHRsYGl3V2JESF9CRmlLXm5OYGxFZmF0TlxcPGFjQEhqbk5vaFhyXFxWXz9HZ3VQZzp3XUNwZ2ZfZ25fY1tQZ3RPcWdpZ3FYYWQ+bFBvX0ZBcHBIYkZQa1tebGFZZkl4ZWRwYGhecGZHZGNuZFlJa1xcYG9ueXJ4V2NCd3VaSF9nWWY7RmpyR2l0Tl9OQHl1TmdhaFxcRnBuVWdeZ09kX1lcXGdOd09od0hIdUxoZHFeZE1vX0xRa0BZaHlIXFxzV3dRaXFJWW1weV9zWHlYYXl4RlxcZkhsO0B3TVdseUlwamB4XXlcXGFxbll5eEJPZUtHeTpvd2tIY1FRcXhQXmlub3FoanF5W2B3XVVAaW9vdFFXZz5hZENHZW9ub3M+ZVBveWVRdHNnZU1ocVlOa0pZbHlpd1lhYENvbG9GWlo+eWVAY0pPZ292Z3I+ZEFJWm1eXkFZcXRgaUl4YkNwXFxfb3ZRYFpfZmRoXnNTP1t5SGxpZmVaT2ttZnVZbl5aeV5zUXBlZnJFWGBIYV8+R148QWtoT29QT2c7SWFEQV9ucG1gYGRgV2VfcWJpV2lmeGJKaXVXWWxtVmRLZ19ESWRfdnBrXmk9TmNnPnNBSG0+SXBZUVxcTGd3dGliTXhuPEZ2Q3B2VEh2Umlib1Blc25bV0ltS1h4a1lrXmZodlhgdWF5a3ZnT0Z1eVllQ2dxckhya1lyQlFmUlduUmd4WEZyX25iV3h3aHdbaVdfZmZxUk9mR3ZhRVliS05jVUhiVG5pTG5bXU50PVhiaXB3RHF1eT5makBlPW9yYXFuaWhwT0hvXXlvYHd3PUhpTXhieHF0Q1duX2ZobGhtQUlsd3BdT2ZtWkdldz9iQj9lTT9hUUduXFxXaj5waG1ecWZfZWRRZ2VXWk8+bXJAaUdhcFpnc0dQa09vX3B4anJZZWJeeG9xX05ocWhPXFxFPl9fRnlsWHdFdl9IV2B0aWRzXlphQV9dQHRgWXhKeXVyP3g7eVp3d2tjcW5tZ2xuTmFWR3NnX1t1cWlfWV9fUG5dZ3JTX2tMaHlwTmVVUG54RndCaGN0SW9wR2xQX11QYGZlPlxcZ3BhQ2dsY19cXGA/YGhpcW92YEdQYENQYl5fXnZfcTpIZ05Ib1ZfW2xxXT4+cGR3anJYYDxubkpxbUpPaXNOdWhxZ3lfYVNfaUFgckhocVZYbz4/aVlnYXF3dGtxW3V3WF1nO3dGX3FFVVt4YHNXX1FGQ1FodEFiP3d2WjtlQUlUTktmZldVS0tHQnl0dFljbElYYW1HWFt5Qml0bD95dklDbG9WZVVVO01TREVTT1dDV0l5cztXbnFzVkdiOmdpaHNUYWVTSD9ob1tJQkVXQ1NITUdjTENlY09lT191TFVCdXFZd0tyVE9Dd2NjdG1IPVVnbHd1TEtSXFxZZHBzYkRhc0I9Y3FdaGJvZmZpV01paVI9VklZUnM/WWNVUnJpRltfVWJzRl5lUkc9YkJ3YmpTaG9jSD9nZnFfWVZxWHV3Y3RXdXRHdj9NZ1k9R1ZrSWQ/cjpHUnhzZk5XZ2ZPRGI7eVVPY0JrRGdXY0VNZHhzRFJHZnJbWHJBaEFHWVBpdGtPcktxZEZFaWpjZVhHSFxcUVdAbUhsWWJrZ3NFc0JIXXR0XXN1ZUJcXD9XY0lGZ0NDY3lDOmFERFlTUnVUZT9VZWdIW0tzd1lpPXFZRT1TT0d4PHlnP21VVk1GU1V3VV1iRkFVclN1dWVUdGFXX1FGT3FoPGl5XUd4dEVoYHFZT1lVaHl5P2FXS3d0cEFTZGd5SUN1ZU1SUldIR0tHd1lFQWd1eVtzS2F5ckd3d0FiWm91d3FiVWNXZD9FTmlDTUNJcD1STGVVaUdJbU9HU3l4SklEbXNnXlFzZGlWdFtiUz1DRkFXPklzXWtTXm1GRmFYXkN3bUV2VlVJYEdDTkVVT1RNcWRXRElZQ3hSP1hUZGlqW21vbllXRGxTVmV4cGB4PklYSGhxZXFvdVBOX0lLWWFLTGRNRkFWWll2XzxyZUh1Rlxcd2l0bG1lUHVpT1tkVEJJd2lRcHlscDxAcHZFWWpRV1VRcWNcXGxdQFZeaHF0WFFxQHV5bHZUXXJiZFZMZGpiPVN4XW1rRW1CcXNpVXFteEx0UFhrPXlpUGxkSXdMVG9AQXBDeXV5WVVxVXlgVHJcXFxcTmhNWXlsandIdUNUT1VQWW91bFJVcklxc09tVFphTXhcXFg8bVVFXFx0c1xca3J0dG9NcEBdTGNkb1hNVHBQbEpkdHlMblJlVm9keWU8blJdcG94TElhVlN0dGR4b2lteHdsTW5UWGtseU5QdkNhS19UVGhMS29EdWp0VEhwT05gblZQT01wc2VAdTxMU0pRcldlblxcTHNkYXQ7dXZwaUpcXEFRQXFUXFxIa0h1VWRVVm55SnY9UHVQazs9THdtUDp0eDpoSnJ0VGZAVTtxWUVxWUU9U25cXHhTVGs6QE9LbW94RGxYSHBSbVd5RXFvaFBhbXY8SWVWPl1VZmJzQHlHQHNmaG5TeXJYcGladmA8WXRNd3hyWHVrb11LWWxcXHFucVFaX2dyVGhcXHV2eVFxaTtoaVtWZVJ3aWxZX1xcVmV5YGZlZlpRQGtmXnlbb2lvWWF4UWhRR3FSaXhXYWdfWGdxeVtcXHl2T193bHBuT15rYmBpdHluSXhySHl5eGlbVWFhV0ZzOz90RmlqUVB2W3lcXEBwcFxcd2RicXRZT2NqP28+X3d4WWpBcFtzRnZrZnRQYVpgSVtEQGFbRmd3QWNMSXZvUF08V188P2VMWXd3YHQ8TlxcQ3B0WU5jT05lT0BjYlBcXEF4a1Roc0ppaVc/ZjxnZGRocFJec3hXeT94X3hHbHh2Zj5gZEdQZltnZmM+XFxEYV5ESXRtPlxcP05zUF9eVFdlUUBhO0huVnZdRT5fUE5jO0FweWZtYXdpSm9qYHhmaE5kUkhgYlF3TkZdb0dqUmdoeFluRnF0U3ZsRE9beD9bQW94RE93WllsXFxna1Rwb3dBbnZPZExjS0tWRz1pRE1UYWtVUUN5O01JTDt0WkdkXFxlU3hncl15QmJrVnR1Z2xhc3JXVEx1WXNRZ2c7aHl1UkxleF1hclRveEtzeHg9SEU7aG9jaWJzdV55eGFpVT9xZGdfeV5veXZJWWFbSGhNV1F5eD5RSXVxRkNFUjs9dXZ1VnZhaUxrR2VHZ0I9VnA9QltrVndhYnVVTHJtUUtVbjxgbXlYcnZtT2hxcWBFUlBJeVh1dEFYbHFdVURNblY9bU15eEdpc0dJbFhtbHRBU1NNTEhRb0NNUXZwVFRYeGZcXGpZZFRgXFxvVlhrdGl1UERQdHRUc0RrbHBSQkVvPW1XUFBScl1QP1B1XlB5UWVOdHFOT1VWVVRuWGRYWXBqTG14cVVwWXFUXFxQVktkbkdFV3BoUnR5TnFwdkhhVW5wbk9Ua1FscEJxcU1xdVtkU215TW1YbHdBcnhxUU1NUUhRWU5tam9weUpdVmZ5b2Zhanl1Tj11UWtFVmlRT1dZWV08bT5FT2pUWWt4V2dYV1Rkbk5Yazt5bnRYdWFsbEJNS2VcXFdhUHF1ZWpkWVd2bFltVXZgeEs8VE9gdVFsZW9CeW14dE5jVHk9QHdIRW12cXN0SFNmZFlfSHh2PVJ4WW9odExjRXFXTVRnWFNXaWpqQVR4UXlNaVJIZFdnRFNTZXFcXFRSVz1ZYEF4Zlh2YWh0VUVqbXRMaj12cFRuP2VyT01QRmVKO0RZdm14d1R4V3hxa1RYS1xcTDtRd3Bnc21vcGV3cGdJeEdWblV2aFBRXkpHcTo/eVFxc0h2Z2FQXFx5VnVod3FRQG5jQXFXZnhfR29peGhbaVxcTHB4WkhgdT9cXEFhaGRfc1Jgd1Jvc0Nvdl9pbFl4XFxBVlxcVmh5Smljc15kdWhqZ3BqWF9bXFxgdU1fdW9OYlxccV9YaWRjQXd4eWJ4T2NZb3Q8T2w7Rm5SSHhWUG9LbmhWWFxcXmBlPklpWFFbR1dlRnFgaF5uWUFia1hqWl9rZUlyVmZfYnBxalBuc3BdbHBgY05yZFlqd3FgeT50SV95allpUUhcXExgYVk+XFxTSGZ5P15VcHNKcHVnb2ZKR2dZaHlpcHV4cWs/V3V0X3dJcVtxRnJtQXVuYGZfaG1wYXNpZlo7cWRxaF1YZl9BX2s7R19NWGRJX2BEYVpTV19Bd2h4YWRYUHdUP19qQVxcYlF3ZFFseXZgeHdlYGZxamlmc1d0ZWdfTFlgWj9rbm90SVdsYXFjd0Fqbkddc2l2V3B1cWBlb1Fgckh2WEZdcVF4PU5gbkF3cEZwdG9rRUlwdFhgX2hpPmlcXGxRaEdpdlRnaT52dm9HckNYXFxIQG50SHVdQXVDWXZ4dl9HZndFaW54aWthZ3ZCSWNNaGZ1V3JRX25rSXl5YXBJXnNLaHVLVnhJWGVQZ11CbnVZVm1zTmRYUGFwXmRgaFtoYWxUeGRwSWN1WV9cXFZfaE9nRGF3ZXdpW0lpU050az9zSz9aamllZ3lkcVl0aj50R3dxeXd5eEdhal5xS0lhYEFlbkFnc1FmVUFgalh0bXBbVnh2PnFjPUh1P2hxZ1ZvX1hpXFxhd0ZHZXB2Z1h5XkFod1lFX11SU2VpaHdDYHllWFVXaVlYTUFiO3NZVWFlQ3lWTkFzVGFnbj9keVlmQkF4PWN5eF1mTV9FZ1NIV09EXU9mQXFpQUNWW0NXS0FJO3VHWGNpVkNWRFdSSm1VYGlJX0N3RUt2YTtWQElGaEFTckVnR11pbkVmR1N1alNYTWNVa01lTGV2YFtScm1DXW9iXm1Ubmdob2dSZHljT19mcmVUZFVFPT1jSE9nRmdUdFt3cUd0QHNoQkNnVG1WeVhwc3RQVE1WdVlwTkxXRVh4UU1XYUBTZ2VXZ01VWDx5Q21OT0FvbnlyXmxXdEVtd3hVZFF0UV9lYFhnbXZ1QGBueVZsXFxhdm9WeVNgY0hvdXNZcWBWYz1nZFRIdXlQc0d3bV5HZUdYYFZGXUpZdlJXcEl5eGBBXUd5d3Nvc3RodXNGd0BfY3R2Y1RIZnhhXFxqVnJKZnZ0aXFBcXY/UHNrRmZ5eHBvZnJQX19GaWRzWHZGYHJTUGJsP2ViUXVaWHZKX2NcXEFfckZic0d3TWl5P2FgcU5UT2JNRVdOT0lQWXNdV0NVR1I8P1NjZ1N2X1NfXXN2bVI8b2NPU1NLV0dPU3N4R2lmU3d1d2VqVWdxZ3lwQUJNR0Z3QVVOZ1RNV3l1VUVJPWVqQ3JtPWJaW1c6R2ZOb1Y/X3dxX2JKS1J2P2JTY0RgRUdqU0Q8Z0d4Q3lmT3JXPUNKSUQ8b1ZEV1hOV2NeZ0RFc0c7QUdoV3hkb3lMdUNNa0JqXXVFcXNRU1R0S2ltbVZOY0JhQ3N2T3hfbXNWR0l4T1NHbXRFX1lfUUdJUXhiUXJgd1V2W1lyUVdOV0ZOeUdWT3lPc3VUbWhGQGxcXGh1VXBZSGVQO3BZP1BZQFBqYnh0b3lqaFVxR3l4VmRVY0FSVUlZR3VqXFx1bVhxb2BZeExtV2REcEdoc1l5cFp0cTpQVG9ZeFo8dWlFS1tGZDp5eTt2XXJRY2J4cUVJYlJQaktoZlBmZEZWcU5XaG5nX2hIc0hwd3FHdnZgcDxfaVs+Xko+Zm54Yz9XbjxBd11wX15ecmtmakpHaWNIX3dRYmxRc3FIeGpRZlBPWkBub0dIXU9wdmVObW1mdmtWdm1Zd19JYEdRc0pudUxmeEN2XUtmeVZneVQ+eUhQYUBoc1k/ZFVHXldOeE1fcldndFJuXk9OcVphWjtZXV9BZG9nW19gdE5eb0o+W1pQZDtHZV1hX2JvakpRbltXbnNQaXVAXmxPbVh3YWBZcGJhXWVAYG1AbGpwYHB2d1tgZGdfZ3BJX3d4a3VpYXVHZndhcUpxeVpYallxX3dReUNneFVhXkRBZWNoZ0Q/W1tebm5gWmNhWz9na1BmZnRJYV5ZZlQ/aktBZXdpZk9eXFxMcFxcXUZyUmZjRU5cXG5BeDxnazxPbHNnXFxkPm47R2JNaV1VaXlAX1tHaXJQQV5yPnd4V11kR2ZqZl1WdmBpSGp2SXBZYVxcdl5zcEB0bVFzQUlzUE5acHBtWT9kV1deZ3dla0hvSFBxYEdqU3FfeGd4XVB1alBkaWlwTFF1ck5nd1B5b1lvXFxneEFQZm5ZdVxcX2xreHFwWWU8P1tbRnRiSF9gb3Z0eG09PnNBSXZOYWlrZlpTSV09R3c6WXNGWVt2YGhbXl4+Z11jWGNsdm88R3JERnI7b24/RmJfSVt0dlxcYUlvT3lqXUBfRD9nRXZxdEZzQT5bUkFfcT9sTElvaGlvVGhdaWd0dz9uaEFwUEFjVlhpOz9lW0FucHhya1BoZ0BeV2dzZ19dUHluTkdxSnFleGd5dkZ3eEFmUHhfYk5sUl90eFdlRlBgcHlueEM8PUNDd2NPT2hLdVVaVXJXZVNlR0I9YUM6dUU/eXRRQ2M9SUhGUVg6eXc6a3Y7RVZxaURfc0c6U2Q/T1hQSWRYbWRyY3Y7YUdMW2R3Y3ZaS3dxbWVsXXI+V3ZlRUdBXUVvQURbP0ZkVWlveURKdUlSQ1dQZVdJU0hOT1dtTWRnX3Rwa0h1YVRfY3RnU3lnQ0Y+P2REZVlhV3l3cXRxSVVfUWZWR1lLS1JCQ0Y+P0RMeUVPV2NUa1RJQ0Y+P0Q8PUNbW0ZDO2dWPUQ8PUNbW1pDX2o7YG88TmJCRj5Eb0BsVGhgVWN0VFZFWD91bXd4cW9Zd1FZc2V5b3lwTz10SkhcXGw/VWtQZFRfaXBiYFVKTFJCUkJDR21TRXBbV0pnQl9LVXJdaFJ3dFxcR1VOQ0Y+P1xcPmBsU1heQW9rbklrZWdkb2FzP25kXWhtWUBsUGlsXm9lPkBcXDxLTHhRSXBRdEFfcF93UmB0UXl0QW5ralh5X1hpXFxJa2Fedmd3Z3VXbWZoZXVwZHRYcXVodmxhaEJIaGZ5d2Zhd05IYj1wWkNRcj9YW11ndm9IaF1xYmNBd2JBbDtZakFWc194bFhPd1ZWdW5IZ01gbWxPc2NOYHNPeF5hY3R5ZlhIaUBvZXRHd19GbXF2Z1hfdnVHZW1wZkdAXjpYX3BAZkxhbkNPeG5ZdElXYWA+ZmRhaV9vW0BAeGNZeXBpd01wbVhwXVNuYXY/cW1AZmRQXmJBZXh2dER5amRwWz9XY0JGXj5APG9paT9XYkNWeDtzYVFyRnVIaF11ckNleGNZdG12dUFla1NWXkdnY0dzc3F5ZlloSVFzWGlpdWVWeGF5c0lkbFFJZ2FoTWFWYGFzU29zcWl1dXdYdUtCdk9JcWV1dGdYbEV1X3Vkc21lVVtkaUdjc3VXcnFJdF14YkVlb1NXUG1WWUtzd1dWQXFDU11pckVoRjtFajtScGV3VGl2YlNTcndnWldWc2FVZTtDQE9mX1tiSktKPE1vRDxLRUFNQ3hyQk1ZeER3TlBWW0B0P2BXRnB0dUVtQER5X2luTlRLSkF1UkFtb213Q1hMYUxwTHFYb2VYX2lZaWxOYEBwSWRqYm13VklxSFB4OjxuOmVNdjxZalxceFJtUVFRc1FMUW5VTDw9S1tcXFpPVlpAd3VbXms9YXRiP3VqSGY/dm5FT3hUcGVWSGlgSW1MUXRMUXZSQF5nR3VsaGJUTl1UTmtMb2I6QHdIV2VxcGdHUXVRd2RRd1xcdF9vTkBkc0BePjxIbmdob0dtT3RAd1xcdFJSdFF0XXhiRXJjUWx2cG5RVFRhcFNvXXNEQFJ1VVl1bXRGPFJMaFY+ZHBvaHB4cFlVRFJBUVNDZHNcXEBLW1xcakpMUkJlcjpoWFE8dmU8WHZBeWtFdW14VklFcmNRPHljS1VmQGVWdnFEXFxvdkVfeERFR0NPc1JJaF1VWEhJYnNnVFJJaHZtZ093WFdNeEtrRj4/RDxeZEQ+aEhwaXJJdkFobXlIcHJYdTtYWkFOW0R3bF5pYHdBakNfXFw+eGhNeWdbRnNsTmptd3N3dnRTSG5yX3ZLeGJWZmo/RmRpYGw8V1xcbl9vTkBgVF9cXFteakpaP05qT3ZvUV54TWhmRz5dZ05rSk5iQkJbW2ZCPVZnW0NXSWR1d0lNZ2ZWXUNHPXJFZ2VKS1JCQ0Y+ZHlDPHlPXVNWQFFreHVWeVdKcHNKaG5WXVNzdHZWRHV4WFZBdG1KTFJCPjtMTkw9c0RwdE9xSm5lSmJhS0tgbEVMT1JcXGpKTFJCanZdTEU8dlNkT0RFT1JkbVdkTWZoUjw9S1tCW2N5VjtlPGViY2tEeE9zP09UajtDW1s6PFNOPU1nTDtEPmR2PEBMPD07Ojo6PmRzPDo6Ojo6W2JEaUJbWzo8U0NBeXk9TENJbkVBTFdEUWE8Sjo8SjpgblxcdE5cXHRUWzxQOzI7XCJce1x9
Graphe et tableau de variations d'une fonction f \302\251 Alain Le Stang - "Apprendre Maple" - 2006
S\303\251lectionner Edit/Execute/Worksheet ou cliquer le bouton !!! pour ex\303\251cuter ce Maplet.
restart:
with(Maplets[Elements]): with(plots):tab_var:=proc(f,x::name,fonc::name,a,b)
global liste;
local liste_X,signe_derivee,liste_def,texte,fleche,traits_verticaux,
N,X,Y,S,Lf,largeur,hauteur,bordures,doubles_traits,fleches,limites,colonne1,ligne1,signes,h,i,l,w;
#########################################################
#### proc\303\251dure liste_X ####
#########################################################
liste_X:=proc(f,x::name,a,b)
local i,j,DF,F,L,M,N,S;
L:={a,b};
F:=[singular(f(x))]:
for i to nops(F) do
L:=L union {rhs(op(F[i]))}
end do;
DF:=[singular(D(f)(x))]:
for i to nops(DF) do
L:=L union {rhs(op(DF[i]))}
end do;
S:=[solve(D(f)(x),x)]:
if S=[x] then S:=[a,b] end if;
for i to nops(S) do
L:=L union {S[i]}
end do;
L:=sort(convert(L,list));
M:=NULL;
for i to nops(L) do
if evalb(evalf(L[i])>=evalf(a) and evalf(L[i])<=evalf(b)) then M:=M,L[i] end if
end do;
M:=sort(map(evalf,convert({M},list))):
N:=NULL;
for i to nops(M) do
for j to nops(L) do
if evalb(evalf(L[j])=M[i]) then N:=N,L[j] end if;
end do;
end do;
[N]
end proc:
#########################################################
#### proc\303\251dure signe_derivee ####
#########################################################
signe_derivee:=proc(f,L::list,X::list)
local i,j,M,s;
M:=NULL;
for i to nops(X)-1 do
if X[i]=-infinity then
s:=evalf(simplify(D(f)(X[i+1]-1)))
elif X[i+1]=infinity then
s:=evalf(simplify(D(f)(X[i]+1)))
else s:=evalf(simplify(D(f)((X[i]+X[i+1])/2)))
end if;
if s=0 then M:=M,0 else M:=M,sign(s) end if;
end do;
M:=[M]:
for i from nops(M) to 2 by -1 do
if sign(M[i-1])=sign(M[i]) then
if L[i][2]=true then M[i-1]:=M[i-1]+M[i] end if
end if;
end do;
for i to nops(M) do
if is(M[i],integer) and abs(M[i])>1 then
for j from i+1 to i+abs(M[i])-1 do
if M[i]>0 then M[j]:=evalf((j-i)/(abs(M[i])),2)
else M[j]:=-(1+evalf((j-i)/M[i],2)) end if;
end do
end if;
end do;
M
end proc:
#########################################################
#### proc\303\251dure list_def ####
#########################################################
liste_def:=proc(f,L::list)
local i,M,N,b,c;
M:=NULL:
for i in L do
b:=true;c:=true;N:=NULL:
try
simplify(f(i));
catch:
b:=false;
end try;
N:=N,i,b;
try
simplify(D(f)(i));
catch:
c:=false;
end try;
N:=N,c;
M:=M,[N]
end do;
[M];
end proc:
#########################################################
#### proc\303\251dure texte ####
#########################################################
texte:=proc(absc,ord,txt,police,taille,drapeau,indice)
if txt=-infinity then
textplot([absc,ord,"-"],font=[police,taille]),textplot([absc+1.2,ord,"\302\245"],font=[SYMBOL,taille])
elif txt=infinity then
textplot([absc,ord,"+\302\245"],font=[SYMBOL,taille])
elif drapeau=0 then
textplot([absc,ord,txt],font=[police,taille])
else
if is(txt,rational) then
textplot([absc,ord,txt],font=[police,taille])
else
textplot([absc,ord,cat(drapeau,indice)],font=[police,taille])
end if;
end if;
end proc:
#########################################################
#### proc\303\251dure fleche ####
#########################################################
fleche:=proc(P1,P2)
local fl;
fl:=proc(x1,y1,x2,y2,a)
local d,x3,y3,x4,y4,x5,y5;
d:=evalf(sqrt((x2-x1)^2+(y2-y1)^2)):
x3:=evalf(x1+(d-a)/d*(x2-x1)):y3:=evalf(y1+(d-a)/d*(y2-y1)):
x4:=evalf(x2+0.5*(sqrt(3)*(x3-x2)-y3+y2)):
y4:=evalf(y2+0.5*(x3-x2+sqrt(3)*(y3-y2))):
x5:=evalf(x2+0.5*(sqrt(3)*(x3-x2)+y3-y2)):
y5:=evalf(y2+0.5*(-x3+x2+sqrt(3)*(y3-y2))):
plot([[x1,y1],[x2,y2],[x4,y4],[x2,y2],[x5,y5]],color=black)
end proc:
fl(P1[1],P1[2],P1[1]+P2[1],P1[2]+P2[2],1.5)
end proc:
#########################################################
#### proc\303\251dure principale ####
#########################################################
X:=liste_X(f,x,a,b): #print(`liste_X `=X):
Lf:=liste_def(f,X): #print(`liste_def `=Lf):
S:=signe_derivee(f,Lf,X): #print(`signe_derivee `=S):
largeur:=10:hauteur:=5:
w:=nops(X)*largeur:
# affichage des bordures du tableau
bordures:=[
plot([[0,0],[w,0],[w,4*hauteur],[0,4*hauteur],[0,0],[0.9*largeur,0],[0.9*largeur,4*hauteur]],color=black),
plot([[0,3*hauteur],[w,3*hauteur]],color=black),plot([[0,2*hauteur],[w,2*hauteur]],color=black)]:
# affichage des traits verticaux de s\303\251paration
traits_verticaux:=NULL:
for i to nops(S) do
if is(S[i],integer) then
traits_verticaux:=traits_verticaux,plot([[(i+abs(S[i]))*largeur,0],[(i+abs(S[i]))*largeur,3*hauteur]],color=black)
end if;
end do;
traits_verticaux:=[traits_verticaux]:
# affichage des doubles traits verticaux aux points o\303\271 f (resp. f') n'est pas d\303\251finie
doubles_traits:=NULL:
for i to nops(Lf) do
if i=1 then l:=largeur*0.925 else l:=largeur end if;
if Lf[i][2]=false then
doubles_traits:=doubles_traits,plot([[i*l+0.6,0],[i*l+0.6,2*hauteur]],color=black)
end if;
if Lf[i][3]=false then doubles_traits:=doubles_traits,plot([[i*l+0.6,2*hauteur],[i*l+0.6,3*hauteur]],color=black)
else
if simplify(D(f)(Lf[i][1]))=0 and abs(Lf[i][1])<>infinity then doubles_traits:=doubles_traits,texte(l*i,2*hauteur+hauteur/2,0,HELVETICA,10,0,0),plot([[l*i,2*hauteur],[l*i,3*hauteur]],color=black)
end if
end if
end do;
doubles_traits:=[doubles_traits]:
# affichage des textes dans la premi\303\250re colonne : "x" , "f(x)" , "f'(x)"
colonne1:=[texte(0.45*largeur,3*hauteur+hauteur/2,x,HELVETICA,10,0,0),
texte(0.45*largeur,2*hauteur+hauteur/2,cat(fonc,"`(",x,")"),HELVETICA,10,0,0),
texte(0.45*largeur,hauteur,cat(fonc,`(`,x,`)`),HELVETICA,10,0,0)]:
# affichage des valeurs de x dans la premi\303\250re ligne du tableau
ligne1:=NULL:
for i to nops(X) do
if X[i]=-infinity then ligne1:=ligne1,texte(largeur/20+largeur,3*hauteur+hauteur/2,X[i],HELVETICA,10,0,0)
elif X[i]=infinity then ligne1:=ligne1,texte(w-largeur/4,3*hauteur+hauteur/2,X[i],SYMBOL,10,0,0)
else
ligne1:=ligne1,texte(largeur*i,3*hauteur+hauteur/2,X[i],HELVETICA,10,x,i)
end if
end do:
ligne1:=[ligne1]:
# affichage des signes de la d\303\251riv\303\251e dans la seconde ligne et
# affichage des fl\303\250ches associ\303\251es dans la troisi\303\250me ligne
signes:=NULL:fleches:=NULL:
for i to nops(S) do
if S[i]<0 then
signes:=signes,texte(largeur/2+largeur*i,2*hauteur+hauteur/2,"-",HELVETICA,10,0,0):
if is(S[i],integer) then fleches:=fleches,fleche([largeur*i+largeur/4,2*hauteur-hauteur/4],[largeur*(abs(S[i])-1)+largeur/2,-2*hauteur+hauteur/2] )
end if;
elif S[i]=0 then
signes:=signes,texte(largeur/2+largeur*i,2*hauteur+hauteur/2,"0",HELVETICA,10,0,0):
fleches:=fleches,fleche([largeur*i+largeur/4,hauteur],[largeur*(abs(S[i])-1)+largeur/2,0] )
else
signes:=signes,texte(largeur/2+largeur*i,2*hauteur+hauteur/2,"+",HELVETICA,10,0,0):
if is(S[i],integer) then
fleches:=fleches,fleche([largeur*i+largeur/4,hauteur/4],[largeur*(abs(S[i])-1)+largeur/2,2*hauteur-hauteur/2] )
end if;
end if;
end do;
signes:=[signes]:
fleches:=[fleches]:
# d\303\251termination des valeurs de f(x) ou des limites (\303\240 gauche ou \303\240 droite)
Y:=NULL:
for i to nops(Lf) do
if i=1 then
Y:=Y,[simplify(limit(f(x),x=Lf[i][1],right))]
elif i=nops(Lf) then
Y:=Y,[simplify(limit(f(x),x=Lf[i][1],left))]
else
if Lf[i][2]=true then Y:=Y,[simplify(limit(f(x),x=Lf[i][1]))]
else Y:=Y,[simplify(limit(f(x),x=Lf[i][1],left)),simplify(limit(f(x),x=Lf[i][1],right))]
end if
end if;
end do;
Y:=[Y]:
# affichage des valeurs de f(x) ou des limites aux extr\303\251mit\303\251s des fl\303\250ches
limites:=NULL:
for i to nops(Y) do
if i=1 then
if S[i]<0 then
limites:=limites,texte(largeur+largeur/8,2*hauteur-hauteur/8,Y[i][1],HELVETICA,10,fonc,i)
else
limites:=limites,texte(largeur+largeur/8,hauteur/4,Y[i][1],HELVETICA,10,fonc,i);
end if;
elif i=nops(Y) then
if S[i-1]<0 then
limites:=limites,texte(i*largeur-1.8,hauteur/4,Y[i][1],HELVETICA,10,fonc,i)
else
limites:=limites,texte(i*largeur-1.8,2*hauteur-hauteur/8,Y[i][1],HELVETICA,10,fonc,i)
end if;
else
if nops(Y[i])=2 then
if S[i-1]<0 then
limites:=limites,texte(i*largeur-1.8,hauteur/4,Y[i][1],HELVETICA,10,fonc,i)
else
limites:=limites,texte(i*largeur-1.8,2*hauteur-hauteur/8,Y[i][1],HELVETICA,10,fonc,i)
end if;
if S[i]<0 then
limites:=limites,texte(i*largeur+1.8,2*hauteur-hauteur/8,Y[i][2],HELVETICA,10,fonc,i)
else
limites:=limites,texte(i*largeur+1.8,hauteur/4,Y[i][2],HELVETICA,10,fonc,i)
end if;
else # nops(Y[i])=1
if S[i]<0 then
if is(S[i],integer) then h:=2*hauteur-hauteur/8 else h:=-2*hauteur*S[i] end if;
end if;
if S[i]>0 then
if is(S[i],integer) then h:=hauteur/4 else h:=2*hauteur*S[i] end if;
end if;
limites:=limites,texte(i*largeur,h,Y[i][1],HELVETICA,10,fonc,i)
end if;
end if;
end do:
limites:=[limites]:
# valeurs particuli\303\250res de x et des images f(x):
for i to nops(Y) do
if nops(Y[i])=1 then Y[i]:=op(Y[i]) end if
end do;
liste:=[seq(x||i=Lf[i][1],i=1..nops(Lf)),seq(fonc||i=Y[i],i=1..nops(Y))]:
# trac\303\251 du tableau des variations de f
display(bordures,traits_verticaux,doubles_traits,colonne1,ligne1,signes,fleches,limites,axes=none,scaling=unconstrained)
end proc:
tab_var(t->1/(t^2-5*t+4)*sqrt(t+1),t,y,-1,infinity);op(liste);exemples:=[ [1/(t^2-5*t+4)*sqrt(t+1),t,f,-1,infinity,-1.5,10,-10,10],
[(x^2+1)/(2*x^2+x-4),x,g,-infinity,infinity,-10,10,-5,5],
[-x^4+2*x^3+3*x^2-4*x+5,x,h,-infinity,infinity,-5,5,-10,10], [exp(-u)/(u^2-1),u,i,-infinity,infinity,-5,2,-20,20],
[2*t/(t^2-4)+1/2*ln(abs((2+t)/(2-t))),t,j,-infinity,infinity,-10,10,-10,10] ]:
MajExemples:=proc()
global exemples;
local v,ex;
v:=Maplets:-Tools:-Get('DDB'('value')):
if v="Ex1" then ex:=exemples[1]
elif v="Ex2" then ex:=exemples[2]
elif v="Ex3" then ex:=exemples[3]
elif v="Ex4" then ex:=exemples[4]
else ex:=exemples[5]
end if;
EffacerCourbe(); EffacerTabVar();
Maplets:-Tools:-Set('ExpFonc'('value')=ex[1]):
Maplets:-Tools:-Set('NomVar'('value')=ex[2]):
Maplets:-Tools:-Set('NomFonc'('value')=ex[3]):
Maplets:-Tools:-Set('XVmin'('value')=ex[4]):
Maplets:-Tools:-Set('XVmax'('value')=ex[5]):
Maplets:-Tools:-Set('Xmin'('value')=ex[6]):
Maplets:-Tools:-Set('Xmax'('value')=ex[7]):
Maplets:-Tools:-Set('Ymin'('value')=ex[8]):
Maplets:-Tools:-Set('Ymax'('value')=ex[9]):
end proc:
TabVarMaplet := Maplet( Window( 'title'="Graphe et tableau de variations",
BoxRow('vscroll'='always',
BoxRow(border=false, inset=0,
[ BoxColumn(border=true, inset=0, 'caption'="Fonction",
[TextField['NomFonc']("f",width=2), "de la variable", TextField['NomVar']("x",width=2),"Exemples:",DropDownBox['DDB']("Ex1",[Ex1,Ex2,Ex3,Ex4,Ex5], 'onchange'='majEx')],
[ TextField['ExpFonc'](),Button("Effacer",'onclick'='effFonc') ]
),
BoxColumn(border=true, inset=0, 'caption'="Graphe",
["Pour les abscisses entre:",
TextField['Xmin'](width=5), "et", TextField['Xmax'](width=5)],
["Pour les ordonn\303\251es entre:",
TextField['Ymin'](value="-10",enabled=true,width=5),"et",
TextField['Ymax'](value="10",enabled=true,width=5)],
Plotter['PL1'](width=300,height=315),
[Button("Effacer", 'onclick'='effCourbe'),
Button['B1']("Repr\303\251senter", Action(
Evaluate( 'PL1' = 'plot(ExpFonc,NomVar=Xmin..Xmax,discont=true,view=[Xmin..Xmax,Ymin..Ymax])' )
)
)]
),
[Button("Aide", RunDialog('MD1')), Button("Quitter", Shutdown())]
]
),
[ BoxColumn(border=true, inset=0, 'caption'="Variations",
["Pour les abscisses entre:",
TextField['XVmin'](width=5),"et",TextField['XVmax'](width=5)],
Plotter['PL2'](width=300,height=200),
MathMLViewer['MMLV'](width=300,height=200),
[Button("Effacer", 'onclick'='effTabVar'),
Button['B2']("Tableau de variations", Action(
Evaluate( 'PL2' = 'tab_var(unapply(ExpFonc,NomVar),NomVar,NomFonc,XVmin,XVmax)'),
Evaluate( 'MMLV' = 'MathML[Export](liste)')
))]
)
]
)),
MessageDialog['MD1']( " \302\251 Alain Le Stang - ""Apprendre Maple"" - 2004\134n\134nCe maplet donne la repr\303\251sentation graphique d'une fonction\134n et permet de visualiser son tableau de variations.", 'type'='information' ),
Action['effFonc'](
SetOption('NomFonc'="f"), SetOption('NomVar'="x"),
SetOption('ExpFonc'=""), SetOption('DDB'="Ex1")
),
Action['effCourbe'](
SetOption('Xmax'=""), SetOption('Ymax'="10"), SetOption('Xmin'=""), SetOption('Ymin'="-10"),
Evaluate( 'PL1' = 'plot(undefined,x=-10..10,axes=NONE)')
),
Action['effTabVar'](
SetOption('XVmax'=""), SetOption('XVmin'=""), SetOption('MMLV'=""),
Evaluate( 'PL2' = 'plot(undefined,x=-10..10,axes=NONE)' )
),
Action['majEx'](
),
Action['majEx'](
Evaluate('function'="MajExemples"),
Evaluate( 'PL1' = 'plot(ExpFonc,NomVar=Xmin..Xmax,discont=true,view=[Xmin..Xmax,Ymin..Ymax])' ),
Evaluate( 'PL2' = 'tab_var(unapply(ExpFonc,NomVar),NomVar,NomFonc,XVmin,XVmax)'),
Evaluate( 'MMLV' = 'MathML[Export](liste)')
)
):
Maplets[Display](TabVarMaplet);