RivaTuner 2.0 RC16 is online

Discussion in 'RivaTuner Advanced Discussion forum' started by Unwinder, May 22, 2006.

  1. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,453
    Likes Received:
    1,471
    RivaTuner 2.0 RC16 is finally online!


    Known issues:

    - Unlike ATI's own overclocking tools (WINCLK and its' derivatives), RivaTuner doesn't relax memory timings during changing memory clock frequency on RADEON X1300 / X1600 / X1800XL series by default. Due to this reason, memory overclocking via RivaTuner results in much better performance comparing to the same memory clock set via ATI's overclocking tool. However, it will result in lower reachable memory clock too. To reach the same clocks by relaxing memory timings you may enable "Allow VGA BIOS script parser to tune timings on memory clock change" option.
    - RivaTuner's driver-level Overdrive 3D clock frequency control will not work on the Catalyst 6.4 driver due to ATI bug. The problem is not RivaTuner specific and is also echoed in ATI OverclockerX1K, HIS iTurbo and Sapphire Trixx overclocking tools. The bug is fixed in the Catalyst 6.5 drivers suite.
    - Due to specifics of ATI drivers, third-party overclocking settings done by tools like RivaTuner, HIS iTurbo and Sapphire Trixx are overridden by Catalyst Control Center's Overdrive settings. You must disable manual overclocking in the Catalyst Control Center to get RivaTuner's driver-level Overdrive 3D clock frequency control working.
    - Attempt to change memory clock frequency on ASUS X1300 PRO series may cause system to hang with corrupted image on the screen. The problem is not RivaTuner specific and also echoed in ATI OverclockerX1K and ASUS SmartDoctor overclocking software. The problem is located in ASUS VGA BIOS and caused by incorrectly functioning memory clock frequency programming script, which is parsed by all these tools during memory clock frequency programming. Due to this reason, you won't be able to overclock memory using the tools mentioned above until ASUS fix their VGA BIOS. However, unlike these tools RivaTuner optionally allows you to avoid VGA BIOS script parsing and use hardcoded memory clock frequency initialization codepath for X1000 family display adapters. You may disable "Allow VGA BIOS script parser for clock frequencies programming" option to make RivaTuner's memory clock frequency control working even on the cards with such VGA BIOS.

    Minor bugfixes:

    - Restored Catalyst 5.10 / 5.11 compatible SoftR9x00 patch scripts, which were erroneously not included in the previous version's distributive.
    - Saving driver-level overclocking profile when Standard 2D or LowPower3D performance level is selected and subsequent attempt to tick "Apply overclocking settings at Windows startup" or to save startup settings no longer results in saving 3D startup clocks for this performance level on NVIDIA GeForce FX and newer boards.
    - Fixed abnormal negative remote temperature reading for temperatures above 64°C in ADT7473 plugin.

    What's new:

    - Added ForceWare 84.xx and 87.xx driver families support.
    - Updated databases for Detonator and ForceWare drivers. Added databases for ForceWare 82.12, 83.40, 83.90, 84.11, 84.12, 84.17, 84.20, 84.21, 84.25, 84.26, 84.29, 84.43, 84.56, 84.66, 87.08 and 87.25 drivers.
    - Added Catalyst 6.1 - 6.5 drivers detection.
    - Added Catalyst 6.1 - 6.5 certified SoftR9x00 patch script (32-bit version only).
    - Added support for AGP display adapters equipped with NV41, NV42 and NV47 GPUs with HSI PCIE-to-AGP bridge (GeForce 6800GS AGP and GeForce 7800GS AGP series).
    - Added NVIDIA G71, G72 and G73 graphics processors support. Thanks to Andrew Worobiew for testing RivaTuner with NVIDIA GeForce 7300, 7600 and 7900 series.
    - Added GPU alias names support. Now RivaTuner's hardware database may contain alias names for GPU families, using different internal and marketing codenames (e.g. NV47 / G70, NV49 / G71 etc.). RivaTuner will display alias name in hardware identification string in the Main tab and both original / alias names in the diagnostic report.
    - Added workaround for certain NVIDIA driver suite libraries, having invalid translation table in version information structure (e.g. nview.dll). Now RivaTuner first tries to access version info via standard translation table then falls back to hardcoded language-specific version storage to retrieve version of such files.
    - Added R580 GPU support. Thanks to Peter Yeung @ HIS for providing RADEON X1900XT for testing. Also, big "thanks" goes to FedEx for "losing" one X1900XT sample during transporting, delivering completely empty box instead of hardware and this way delaying software release date. Due to this reason FedEx services will no longer be used for RivaTuner hardware samples delivery. Personal thanks goes to UPS for delivering repeatedly sent sample in time.
    - Changed pipeline naming scheme. Now RivaTuner uses "Npp, Nvp" naming scheme for GPUs with no tmu/pp decoupling and "Ntmu" naming scheme for GPUs with decoupled tmu/pp architecture (ATI RADEON X1000 family).
    - Unlocked memory clock frequency controls for RV515 GPUs.
    - Drastically improved low-level hardware overclocking module for ATI R3xxx and ATI R5xxx GPU families:
    - Added optional MPLL reset mode for R3xxx graphics processors. Unlike the most third party R3xxx overclocking utilities changing just the clock frequency generator's dividers during memory clock frequency programming, RivaTuner can now also optionally suspend R3xxx memory clock frequency generator before programming and fully restart it simultaneously with R3xxx memory controller after programming is done. This allows increasing maximum achievable stable memory clock frequency by up to 100MHz on some low-end R3xxx based display adapters (e.g. RADEON X550).
    - Now RivaTuner detects default clock frequencies via ATI VGA BIOS when possible. The previuos mode can be toggled with UseVGABIOSDefaults registry entry.
    - Now RivaTuner disables RAMDAC output when changing memory clock frequency on ATI RADEON X1000 family display adapters to prevent undesired temporary visual desktop corruption effect caused by memory controller reinitialization. The previous mode can be toggled with AllowDisableOutput registtry entry.
    - Added optional power user oriented ability of unloading ATI Catalyst driver from memory during programming memory clock on ATI RADEON X1000 family display adapters.
    - Added hardcoded memory clock frequency programming codepath for RV515 with DDR2 memory.
    - Added optional ability of setting clock frequencies via parsing VGA BIOS initialization scripts on all R5xxx GPU families. Now RivaTuner may set R5xxx clock via hardcoded GPU-specific hardware initialization codepaths like the previous version and like most third party R5xxx overclocking tools, as well as via parsing VGA BIOS initialization scripts like ATI's own overclocking tools (CCC and OverclockerX1K). Please refer to known issues section for details.
    - Unlike ATI's own parsers executing the scripts completely, RivaTuner's VGA BIOS parser is intelligent and can programmatically skip some portions of scripts causing undesired side effects like automatic memory timings tuning performed when R5xxx memory clock frequency is changed via ATI's CCC / OverclockerX1K. RivaTuner provides you both methods and allows you either to change memory clock frequency only or to allow the script to autotune memory timings syncronically with memory clock frequency change.
    - Added optional driver-level 3D clock frequency control mode for Overdrive2 capable (X1800XT) and Overdrive3 capable (X1900 series) display adapters with separate 2D/3D clocking. Now RivaTuner's low-level overclocking module can adjust 3D clocks on such cards via the Catalyst driver instead of accessing clock frequency generators directly. Please refer to known issues section for details.
    - Added bundled NVXML tool v1.0. This tool is a small command line based utility providing data exchange between the registry and application specific profiles from NVIDIA control panel's profile storage XML file and provides the following functionality:
    - Fully user extendable list of supported profile properties. NVXML is the first publicly available tool build upon new generation RivaTuner's core (codenamed RivaTuner 3.0 core libraries) and it uses the core's high-level scripting RTL language for describing the properties. The scripts are processed in runtime by the core's RTL interpretator and can be easily extended / edited on-the-fly.
    - Command line based ability of importing settings from the registry to NVIDIA control panel's profile storage XML file. The settings can be imported for all applications as well as for a specified application only.
    - Command line based ability of exporting settings from NVIDIA control panel's profile storage XML file to the registry. The settings can be exported for all applications as well as for a specified application only.
    - NVXML tool can be integrated in RivaTuner so all the registry changes done by RivaTuner (e.g. via Direct3D / OpenGL tuning GUI or directly via the PowerUser tab) can be also automatically transferred by NVXML to NVIDIA control panel's profile storage XML file. Please take a note that currently NVXML is in experimental stage, that is why integration is disabled by default. You can enabled it with .\Tools\NVXML\NVXML.reg file.
    - Updated NVStrap driver v1.12:
    - Added G71, G72 and G73 support.
    - Updated RivaTunerStatisticsServer v2.0.0 bundled utility:
    - The server's hooking library internal architecture has been seriously changed for multitasking support. Now the server can load personal OSD profiles and collect independent framerate statistics / record benchmark results for up to 256 simultaneously running 3D applications.
    - The server's shared memory layout has been changed drastically to provide client applications access to framerate statistics of multiple simultaneously running applications. Third party software developers using the server's shared memory may refer to SDK and updated RTSSSharedMemorySample source code for details. Please take a note that new server's shared memory layout is not compatible with the previous one, so the applications designed to work with the previous shared memory layout must be recompiled to support new format.
    - The server's shared memory is no longer available during 3D application runtime only. Now the memory is available during whole server's life time.
    - Increased amount of available On-Screen Display slots. Now up to 8 applications can simultaneously capture and use independent OSD slots.
    - The server's "Show own statistics in OSD when it is not in use by other application" option has been replaced with "Show own statistics in OSD" option. Now the server's own statistics (instantaneous framerate or benchmark statistics) uses its' personal OSD text slot, which is not available to any other server's client applications, so the server's statistics can be displayed in OSD even if all 8 OSD slots are in use.
    - Now the sever redefines Direct3D application's viewport during OSD rendering when desktop / window OSD coordinate space is used. This allows the server to display OSD beyond the application's viewport.
    - Improved hardware monitoring module:
    - Added reference fan duty cycle monitoring for NV41 / NV42 GPUs.
    - Added core VID monitoring for NV41 / NV42 GPUs.
    - Added new unique "Event history" panel, which was designed special for simplifying long hardware monitoring logs analysis. New hardware monitoring log files allow you to see which applications were running during logging session, easily calculate monitoring statistics only for selected 3D application runtime (e.g. minimum / average / maximum temperatures recorded during 3DMark2006 runtime). These features are extremely useful for long log files, which contain information about many 3D applications running in succession.
    - New RivaTuner's hardware monitoring panel is able to record and display the following information:
    - Global instantaneous event markers, identifying system-wide events and containing long text message with event description.
    - Long event markers, identifying an application's runtime.
    - Application specific instantaneous event markers, identifying an action performed by the application and and containing text message with event description (e.g. "Test ... of benchmark ... has been started").
    - Any third party application may save both global and application specific event markers in RivaTuner's event history panel via special event queue shared memory. Even queue format is completely open, please refer to RTEQSharedMemorySample included in SDK for details. Now any application may use RivaTuner's event queue to save detailed info about its' activity (e.g. benchmarks / system stress tests may save event markers identifying new each subtest start).
    - By default RivaTuner uses statistics server for recording runtime markers of all 3D applications and records events sent by third party applications via event queue. Both of this features can be optionally disabled via the "Event history" panel's properties. Also, the panel's properties allow you to define exceptions allowing either to forcibly enable event registration for non-3D applications (e.g. system stability tests) or to forcibly disable event registration for any undesired 3D application.
    - Event history panel's context menu gives you an ability of quick selecting:
    - Whole long event marker identifying application's runtime (e.g. to calculate an average temperature, recorded during 3DMark2006).
    - A part of long event marker identifying a period of application's runtime (e.g. to calculate average framerate recorded between "Test 1 of benchmark ... has been started" and "Test 1 of benchmark ... has been ended".
    - Updated hardware monitoring log file format to v1.3. New format allow storing event markers for newly introduced event history, as well as stores whole plugin calibration info for the data sources recorded via the plugins. This ensures that the graph will be calibrated properly even when viewing the log on other PC which doesn't have this plugin installed.
    - Added "Run server" button to the graphs. This button is automatically displayed on all graphs, requiring the server to be running for proper functionality (e.g. on the "Framerate" graph) when the server is not loaded in memory. The button is also displayed on the graphs, having "Show ... in on-screen display" option enabled. You may click this option to quick-load the server.
    - Added tooltips to the graphs' buttons and newly introduced event markers.
    - Added monitoring history screenshot capturing ability special for reviewers including RivaTuner's hardware monitoring history screenshots in their reviews. Now you may press <F11> to create a screenshot. RivaTuner will automatically exclude any undesired GUI elements from the screenshot (e.g. horizontal scrollbars, "Close graph" buttons, separator window borders etc.), making the screenshot print-friendly. Furthermore, RivaTuner may also automatically add a watermark (e.g. your website logo) to your screenshot to free reviewers from performing routine actions and applying a watermark manually. By default RivaTuner adds its' own watermark logo located in .\Watermark folder, however you may replace it with your own logo if you wish. Please take a note that logo is placed in bottom right corner by default, however you may place it in any corner by changing logo filename. Also, please take a note that you can use up to 4 logos simultaneously if you wish (1 logo for each corner).
    - Changed "Run server" button handling behavior in the source's properties window. Now this buttons just quick-loads the server and no longer automatically configures to be started with Windows.
    - Improved hardware monitoring log files viewer:
    - Drastically optimized long log files opening routine. Now big files can open up to 5 times faster than before under certain conditions.
    - Now you can close undesired graphs and change graphs order when viewing .hml files. These features are useful in conjunction with newly introduced history screenshot capturing ability.
    - Improved hardware monitoring plugins:
    - Improved VID interpretation features:
    - Added incomplete voltage tables support.
    - Now automatic VID interpretator selection algirithm also uses VID bitmask width checking when searching for the closest matching VID interpretator in the database.
    - Added new VID interpretators for GeForce 6800GS and GeForce 7900 display adapters.
    - Improved ADT7473.dll plugin:
    - Added fan stop case detection.
    - Improved I2C misreading filtering algorithm for long I2C transactions containing 2 and more I2C byte transfers.
    - Improved CPU.dll plugin:
    - Added dual-CPU / dual-core systems support. Now the plugin can independently monitor clock frequencies for each CPU / core on such systems.
    - Added per-CPU / per-core CPU usage monitoring. This feature was added special for diagnosing dual-core CPU optimizations, introduced in the latest ATI and NVIDIA display driver families.
    - Standard / high-resolution timer based CPU clock frequency calculation implementations are no longer exposed by different data sources in the plugin. Now the calculation mode can be toggled via the source's additional properties.
    - Improved NVSU.dll plugin. Added workaround for certain versions of ASUS motherboard BIOS (e.g. v1011 for A8N-SLI), which don't initialize NVSU SMI interface properly and prevent NVSU.dll plugin from working. Now the plugin always detects such motherboards as NVSU SMI capable, even if the BIOS doesn't initialize nForce MCP scratchpad registers properly.
    - Improved NVThermalDiode.dll plugin:
    - Added G71 / G73 thermal diodes support.
    - Added negative thermal diode offsets support.
    - Improved LM63 plugin:
    - Improved I2C misreading filtering algorithm for long I2C transactions containing 2 and more I2C byte transfers.
    - Added SysMem.dll plugin, providing "Physical memory usage" and "Page file usage" data sources implementation.
    - Improved low-level diagnostic report module:
    - Added memory bus type detection for NV42 GPUs.
    - Added negative geometric clock delta support to "NVIDIA VGA BIOS information" diagnostic report category.
    - Added extended thermal thresholds to "NVIDIA VGA BIOS information" diagnostic report category. Now besides critical thermal threshold RivaTuner also displays fan boost and throttling thermal thresholds.
    - Added Overdrive2 / Overdrive3 table info to "ATI VGA BIOS information" diagnostic report category. Now RivaTuner can display Overdrive2 / Overdrive3 2D/3D specific clock speeds, temperatures and voltage level indices for ATI RADEON X1800XT and X1900 series.
    - Added GPU Vddc, RAM Vddc, RAM Vddq and RAM Vddqi voltage tables info to "ATI VGA BIOS information" diagnostic report category. Now RivaTuner can display voltage controller locations and complete voltage tables stored in ATI RADEON X1800XT and X1900 series VGA BIOSes.
    - Added R430 / R480 memory timings decoding to "ATI specific display adapter information" diagnostic report category.
    - Added R5xxx memory timings decoding to "ATI specific display adapter information" diagnostic report category (both RV515's crossbar and R520 / RV530 / R580 ring bus memory controllers supported). This feature was exclusively added to monitor ATI software's automatic memory timing tuning, which is silently taking place during changing memory clock via CCC or OverclockerX1K. Please take a note that ring bus controller's timings detected by RivaTuner will differ comparing to timings detected by RaBiT VGA BIOS editor. The issue will be corrected in the next RaBiT version.
    Added power user oriented I2C compatibility switches for both ATI and NVIDIA hardware:
    - Added optional ability of starting I2C transfer even if ATI I2C controller is busy.
    - Added optional ability of perfroming I2C transfer entirely at kernel-mode driver level for NVIDIA hardware.
    - Added optional ability of performing I2C transfer by means of NVIDIA ForceWare driver.
    - Updated SDK:
    - Added SysMem.dll hardware monitoring plugin source code.
    - Added RTEQSharedMemorySample source code. This sample demonstrates third party developers how to use RivaTuner's event queue shared memory and save both global and application specific events into event history.
    Improved built-in hardware emulation features for plugin developers. Now RivaTuner also emulates I2C and MMIO register writes, and indexed MMIO register reads / writes (e.g. ATI GPU's indexed clock or memory controller MMIO registers).
    - Updated Easter eggs:
    - Updated hidden NVIDIA VGA BIOS initialization script decompiler. Added support for new initialization tokens introduced in G71 / G73 VGA BIOSes.
    - Added hidden ATI ATOM VGA BIOS initialization script decompiler. Similar to previously existing NVIDIA VGA BIOS decompiler, ATI decompiler can process any ATOM BIOS image and generate high-level easy readable code for all initialization and port access scripts. The decompiler was widely used by RivaTuner and many friendly tools' developers for studying ATI RADEON X1000 hardware access protocols and adding X1000 overclocking support.
    - Added new Easter eggs.
    - Removed some obsolete power user oriented registry keys.
    - FAQ updated.
    - Minor UI changes and improvements.
     
    Last edited: May 22, 2006
  2. NightCrawler™

    NightCrawler™ Member Guru

    Messages:
    124
    Likes Received:
    0
    GPU:
    2 EVGA GTX460 1 8800GTSSC
    One question about the XTX clock settings...
    I set 790 for the mem clocks and hit the test button.. which gives me the ok... but once I hit apply it reverts the clock back to 783Mhz.. Any idea why it does that..?
     
  3. Hanjin

    Hanjin Member Guru

    Messages:
    135
    Likes Received:
    0
    GPU:
    8gb RX Vega 64 LE
    Nice and thank you again for the hardwork you've put into it.
     
  4. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,453
    Likes Received:
    1,471
    That's called clock frequency granularity. Clock frequency generator cannot set any clock frequency you wish, it has base oscillator's clock frequency (27MHz) and fixed set of dividers / multipliers for generating requested clock from the oscillator's one. The closest clock that can be generated is selected by driver.
     

  5. NightCrawler™

    NightCrawler™ Member Guru

    Messages:
    124
    Likes Received:
    0
    GPU:
    2 EVGA GTX460 1 8800GTSSC
    Cool. so it's the exact same thing as the sweetspots you use on the 7800 series..
     
  6. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,453
    Likes Received:
    1,471
    Each card has sweetspots, because oscillator based PLLs are used everywhere. The only difference is the step, e.g. 7800s normally adjust ROP/Shader domain clocks with 27MHz step, 1900s - with 9MHz (27/3) step etc.
     
    Last edited: May 22, 2006
  7. sb85

    sb85 Member Guru

    Messages:
    199
    Likes Received:
    0
    GPU:
    XFX 9800GTX+ 512MB
    hey unwinder! thanks!

    ps: i am having a problem with framerate counter, i setup the rtstatserver the same way i did for 15.8 and the frmrates just show up as 0fps whether i am in game or not. i even added the game profile exe and set it up to measure, but nothing happens.

    what am i doing wrong?
     
  8. Dublin_Gunner

    Dublin_Gunner Ancient Guru

    Messages:
    4,642
    Likes Received:
    0
    GPU:
    Gigabyte Rx 460 4GB
    Unwinder, I've been waiting for this.

    I absolutely love rivatuner, have been using it for years, its the best OC tool for GPUs out there by far.

    Just wanted to extend my gratitude to you for all the hard work, and cant wait to get home from work to give it a shot!
     
  9. NightCrawler™

    NightCrawler™ Member Guru

    Messages:
    124
    Likes Received:
    0
    GPU:
    2 EVGA GTX460 1 8800GTSSC
    So far it has given me my best 3DM05 scores ever... 12399 (XTX @ 695/800 stock cooling/volts) :rock:

    I just wish I could figure out how to gain more control over the fan... right now it's either auto or full speed... I want to adjust the fan speed based on temps I choose...
     
  10. Joe_Bar

    Joe_Bar New Member

    Messages:
    7
    Likes Received:
    0
    GPU:
    Albatron 7900GTX @ 715/900MHz wc'ed
    Thanks for the update! :)
     

  11. nutyo

    nutyo Ancient Guru

    Messages:
    4,589
    Likes Received:
    0
    GPU:
    Sapphire Vapor-X HD5870
    Thanks heaps I will be using it straight away and will holler if i have any problems. I take my hat off to you good sir.
     
  12. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,453
    Likes Received:
    1,471
    Most likely you're running old version of server. Ensure that you've uninstalled old release and reboot the PC.
     
  13. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,453
    Likes Received:
    1,471
    I don't think that it is safe to allow user to edit temperature lookup table for automatic mode. That's already calibrated by VGABIOS for the best acoustic and thermal balance. Blind editing it (and especially "optimal" auto filling, like some other utils offer) can do really bad things to cooling system.
     
  14. NightCrawler™

    NightCrawler™ Member Guru

    Messages:
    124
    Likes Received:
    0
    GPU:
    2 EVGA GTX460 1 8800GTSSC
    I agree.... but for some odd reason even at max load my fan never goes to full speeds.
    If I uncheck the fan control I don't get full fan speeds.. If I use the auto function I still don't get 100% fan speed.
    It saves a bundle if I can get it up to speed... auto control gives a max temp of 92°C during gaming at full speed it's 30°C lower.. but the noise is a killer...
     
  15. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,453
    Likes Received:
    1,471
    100% speed in damn noisy. Automatic mode's temperature lookup is calibrated for keeping the temperature within working range, not for driving fan to max speed.
     

  16. SniperDaws

    SniperDaws Banned

    Messages:
    2,565
    Likes Received:
    0
    GPU:
    XFX7600GTXXX Zalman Vf900
    Cheers Unwinder i can now wack my fan upto 100% when in 3D mode 65% in low 3D mode and 30% in 2d mode, is there a tutorial on all the diffrent settings ive never been able to use since its been a while since using an Nvdia card.
     
  17. sb85

    sb85 Member Guru

    Messages:
    199
    Likes Received:
    0
    GPU:
    XFX 9800GTX+ 512MB
    nope, didnt have rt installed because of the 7900series card. and rebooting doesnt help. im going to tinker arnd wid all settings to see which one wrks
     
  18. ComradeF

    ComradeF Member

    Messages:
    12
    Likes Received:
    0
    GPU:
    BFG / GeForce 7900 GT / DDR3 256 MB
    I waited a very long time for this release so I could use RT with my 7900 GT. :) The monitoring hookup should be great with my Samurize setup.

    My question though concerns fan speeds. I saw a post a while back that said the 7900 GT basically shipped with broken fan controls, so we won't ever be able to control how noisy this damn thing is. Is that the case? This is the specific card I'm using, if that helps... Thank you!
     
  19. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,453
    Likes Received:
    1,471
    Trying all combination of the settings in order to find working one is definitively not the best idea. Blind tweaking the system without understanding your action is BAD thing.
    If you don't remember which settings have you changed, _completely_ uninstall the version, install it again, start the server, tick "Show own statistics in OSD" in its' properties then run any 3D applicaition. You shold be able to see the framerate in OSD then.
     
  20. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,453
    Likes Received:
    1,471
    Why don't you simply try and tell us the result?
     

Share This Page